使用Laravel 4检索相关模型

时间:2013-11-10 15:21:14

标签: php laravel 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();

2 个答案:

答案 0 :(得分:0)

您的模型初看起来似乎没问题。我想因为你正在拉item.friend关系,这一行

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

应该是,

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

答案 1 :(得分:0)

你错过了一个循环。我建议在设置多对多关系时,请确保您的方法是复数。尝试阅读代码时更有意义。然后,您将使用@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