【发布时间】: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 (....))