我可以想象一些方法可以做到这一点,但我想确保我正在以高效的Laravel方式做事。
我有用户和团队。用户可以属于许多团队,当然团队可以拥有许多用户。一个典型的多对多:
{
"type": "apache_access",
"clientip": "192.243.xxx.xxx",
"verb": "GET",
"request": "/publications/boreal:12345?direction=rtl&language=en",
...
"url_path": "/publications/boreal:12345",
"url_params": {
"direction": "rtl",
"language": "end"
},
"object_id": "boreal:12345",
"author": [
"Smith, John",
"Dupont, Albert",
"Reegan, Ronald"
],
...
}
和,
class User extends Authenticatable
{
public function teams()
{
return $this->belongsToMany('App\Team');
}
}
我还希望每个用户在每个团队中都有“状态”。例如,“有效”和“无效”。
我是否为“状态”创建了第三个表/模型,并为用户和团队设置了枢轴?如果是这样,我如何使用eloquent高效地为每个团队获取给定状态的用户?
我应该考虑采用不同的方法吗?
答案 0 :(得分:3)
对于多对多,你显然需要一个中间表。 team_user
不管怎样。您可以将status
列添加到此表中。
team_id user_id status
1 1 Active
2 1 Inactive
....
<强>关系:强>
public function teams()
{
return $this->belongsToMany('App\Team')->withPivot('status');
}
public function users()
{
return $this->belongsToMany('App\User')->withPivot('status');
}
和
$users=User::with('teams')->get();
foreach($users as $user)
{
foreach($user->teams as $team)
{
echo $team->pivot->status;
}
}
的文档