【问题标题】:Laravel Eloquent JoinLaravel 雄辩加入
【发布时间】:2014-09-16 23:41:44
【问题描述】:

我有两张桌子,我想加入它们。我查看了其他示例,但无法弄清楚。

我的表格如下。

  • 俱乐部
    • 身份证
    • 姓名
  • 成员
    • 身份证
    • club_id
    • 姓名

一个俱乐部有很多成员
一个成员属于一个俱乐部

我可以列出我的俱乐部,列出我的俱乐部后,我可以列出俱乐部的成员,但我想做的是列出我的所有成员并显示他们的俱乐部。所以我的输出将是 ID、名称、俱乐部名称

这是我目前的代码设置

// clubs controller
public function index()
{
    $clubs = Club::all();
    return View::make('clubs.list')->with('clubs', $clubs);
}

public function show($id)
{
    $club = Club::findOrFail($id);
    $members = $club->Members()->get();
    return View:: make('clubs.show')->with('club', $club)->('members', $members);
}

// club model
class Club extends Eloquent
{
    // each club has many members
    public function Members()
    {
        return $this->hasMany('Member');
    }
}


// members controller
public function index()
{
    $members = Member::all();
    return View::make('members.list')->with('members', $members);
}

// member model
class Member extends Eloquent
{
    // each member belongs to one club
    public function club()
    {
        return $this->belongsTo('Club');
    }
}

【问题讨论】:

  • foreach(Member::all() as $member) { echo $member->name . ' belongs to the club ' . $member->club->name; } 呢?
  • 我在控制器方法和刀片页面上都试过了。两者都有效,但是否会进行更多查询?
  • 对,您正在对每个迭代的俱乐部进行查询。你真正要找的是eager loading。 Member::with('club')->get() 只会执行 2 个查询(select * from members 和 select * from clubs where id in (....))

标签: php laravel laravel-4


【解决方案1】:

在您的Member 模型中声明以下关系方法:

public function club()
{
    return $this->belongsTo('Club');
}

所以现在您可以查询所有成员的Club 信息:

$members = Member::with('club')->get();

在你的View 循环Members 时,你可以尝试这样的事情:

@foreach($members as $member)
    {{ $member->name }}
    {{ $member->club->name }}
@endforeach

这不是Eloquent Join,但使用它的关系技术,你可以按照上面给出的方法来做,如果你想加入,那么你可以尝试这样的事情:

$members = Member::join('clubs', 'members.club_id', '=', 'clubs.id')
                 ->select('members.*', 'clubs.name as club_name')
                 ->get();

在这种情况下,您可以像这样循环并使用Club 信息;

@foreach($members as $member)
    {{ $member->name }}
    {{ $member->club_name }}
@endforeach

【讨论】:

    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 2020-07-29
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2022-07-25
    • 2021-05-07
    相关资源
    最近更新 更多