因三个物体之间的关系导致脑衰竭,希望有人可以帮助我。
我有四个模型:Team
,User
,ProjectType
和Project
Team
有很多User
,有很多ProjectType
User
属于许多Team
,有许多ProjectType
ProjectType
属于许多User
,属于许多Team
,有许多Project
Project
属于ProjectType
由于单个用户可以属于许多团队,因此我想请求ProjectTypes
有User
访问权限的Team
,但仅限于他们当前登录的User
。情况可能是$user->projectTypes
可以跨多个团队访问项目类型,但只会随时登录到一个团队,因此我只需要该子集。
我希望这种结构有意义,但我很难轻易获得我想要的数据
所以我想做$user->projectTypes->projects
并获取该用户的所有项目类型,但只是他们当前登录的团队的子集。
同样,一旦我得到了,我希望能够在该集合中获得<div id="bar">....</div>
。
我想在保持Laravel所有良好的关系方法的同时做到这一点,但我正在努力设置数据结构以支持这一点,并依次获取数据。
值得补充的是我正在使用Laravel 4.2,但我并没有绝对地依赖它,并且如果需要可以升级到5.x以获得此功能。
答案 0 :(得分:0)
如您所描述的那样defined the relationships,您可以访问属于某个用户的属于该用户的ProjectTypes(在您的情况下,$teamid
应该是用户当前登录的团队如下:
$projectTypes = $user->projectTypes()->where('team_id', $teamid)->get();
要轻松访问属于属于所有属于用户的ProjectType的所有项目的集合,您首先要定义the HasManyThrough relationship,如下所示:
class User extends Eloquent {
public function projects()
{
return $this->hasManyThrough('Project', 'ProjectType');
}
}
然后您可以像这样访问该集合:
$projects = $user->projects;
最后,要访问属于属于用户的ProjectTypes的项目,这些项目也属于某个团队(即您正在寻找的内容),您可以使用lists()获取相关ProjectType ID的列表,然后whereIn()来过滤该列表中的那些:
$projectTypeIds = $user->projectTypes()->where('team_id', $teamid)->lists('id');
$projects = $user->projects()->whereIn('projecttype_id', $projectTypeIds)->get();