使用 Laravel 4 检索相关模型


Retrieve Related Models using Laravel 4

我有3个表:用户,项目,项目和朋友。我想获取项目的所有项目,并与相关朋友列出每个项目。我的模型中是否缺少某些内容?最终,我想获得与这些物品相关的所有朋友。

// CONTROLLER
public function show($id)
{
    $uid = Auth::user()->id;
    $projects = Project::find($id)->with('item.friend')->get();
    return View::make('projects.show', compact('projects'));
}
//VIEW
@foreach ($projects as $project)
    @foreach ($project->friend as $friend)
        <li>
            <a href="#" class='itemLink' >{{$friend->email}}</a>
            <a href="#" class='itemLink' >{{$projects->item->name}}</a>
        </li>
    @endforeach
@endforeach
// MODELS
class User extends Eloquent {
    public function project()
    {
        return $this->hasMany('Project');
    }
    public function item()
    {
        return $this->hasMany('Item');
    }
        public function friend()
    {
        return $this->hasMany('Friend');
    }

class Project extends Eloquent {
    protected $guarded = array();
    public static $rules = array();
    public function item()
    {
        return $this->hasMany('Item');
    }
        public function friend()
    {
        return $this->hasMany('Friend');
    }
class Item extends Eloquent {
    protected $guarded = array();
    public static $rules = array();

    public function friend()
    {
        return $this->hasMany('Friend');
    }
class Friend extends Eloquent {
    protected $guarded = array();
    public static $rules = array();

你缺少一个循环。 我建议在建立多对多关系时,请确保您的方法是复数。 尝试阅读代码时,这更有意义。 然后你会用@foreach $project->items as $item$item->friends as $friend发送。

@foreach ($projects as $project)
    @foreach ($project->item as $item)
        @foreach($item->friend as $friend)
        <li>
            <a href="#" class='itemLink' >{{$friend->email}}</a>
            <a href="#" class='itemLink' >{{$item->name}}</a>
        </li>
        @endforeach
    @endforeach
@endforeach

乍一看,您的模型似乎还可以。我想既然你在拉item.friend关系,这条线

@foreach ($project->friend as $friend)

应该是,

@foreach ($project->item->friend as $friend)