Laravel 中的三向关系
Three way relationship in Laravel
脑残三物关系,希望有人能帮帮我。
我有四个模型:Team
、User
、ProjectType
和 Project
Team
有很多User
,有很多ProjectType
User
属于很多Team
,有很多ProjectType
ProjectType
属于很多User
,属于很多Team
,有很多Project
Project
属于 ProjectType
由于一个用户可以属于多个团队,我想请求 User
可以访问的 ProjectTypes
,但仅限于他们当前登录的 Team
和。可能 User
可以访问多个团队的项目类型,但在任何时候只会登录到一个团队,所以我只需要那个子集。
我希望这种结构有意义,但我很难轻松访问我想要的数据
所以我想 $user->projectTypes
并获取该用户的所有项目类型,但只是他们当前登录的团队的子集。
同样,一旦我得到它,我希望能够在那个集合中得到 $user->projectTypes->projects
。
我想这样做,同时保持我通过 Laravel 获得的所有良好关系方法,但我正在努力设置数据结构来支持它,并依次获取数据。
值得补充我正在使用 Laravel 4.2,但我并没有完全依赖它,如果需要,可以升级到 5.x 以获得此功能。
按照您的描述 defined the relationships 后,您可以访问属于用户的项目类型,也属于某个团队(在您的情况下 $teamid
应该是用户当前登录的团队的 ID)像这样:
$projectTypes = $user->projectTypes()->where('team_id', $teamid)->get();
要轻松访问属于 all ProjectTypes 的所有项目的集合,属于用户,您首先要定义 the HasManyThrough relationship 如下:
class User extends Eloquent {
public function projects()
{
return $this->hasManyThrough('Project', 'ProjectType');
}
}
然后您可以像这样访问该集合:
$projects = $user->projects;
最后,要访问属于用户的项目类型的项目,也属于某个团队(即您正在寻找的东西),您可以使用 lists() to get a list of relevant ProjectType ids, then whereIn()过滤该列表中的那些:
$projectTypeIds = $user->projectTypes()->where('team_id', $teamid)->lists('id');
$projects = $user->projects()->whereIn('projecttype_id', $projectTypeIds)->get();
脑残三物关系,希望有人能帮帮我。
我有四个模型:Team
、User
、ProjectType
和 Project
Team
有很多User
,有很多ProjectType
User
属于很多Team
,有很多ProjectType
ProjectType
属于很多User
,属于很多Team
,有很多Project
Project
属于ProjectType
由于一个用户可以属于多个团队,我想请求 User
可以访问的 ProjectTypes
,但仅限于他们当前登录的 Team
和。可能 User
可以访问多个团队的项目类型,但在任何时候只会登录到一个团队,所以我只需要那个子集。
我希望这种结构有意义,但我很难轻松访问我想要的数据
所以我想 $user->projectTypes
并获取该用户的所有项目类型,但只是他们当前登录的团队的子集。
同样,一旦我得到它,我希望能够在那个集合中得到 $user->projectTypes->projects
。
我想这样做,同时保持我通过 Laravel 获得的所有良好关系方法,但我正在努力设置数据结构来支持它,并依次获取数据。
值得补充我正在使用 Laravel 4.2,但我并没有完全依赖它,如果需要,可以升级到 5.x 以获得此功能。
按照您的描述 defined the relationships 后,您可以访问属于用户的项目类型,也属于某个团队(在您的情况下 $teamid
应该是用户当前登录的团队的 ID)像这样:
$projectTypes = $user->projectTypes()->where('team_id', $teamid)->get();
要轻松访问属于 all ProjectTypes 的所有项目的集合,属于用户,您首先要定义 the HasManyThrough relationship 如下:
class User extends Eloquent {
public function projects()
{
return $this->hasManyThrough('Project', 'ProjectType');
}
}
然后您可以像这样访问该集合:
$projects = $user->projects;
最后,要访问属于用户的项目类型的项目,也属于某个团队(即您正在寻找的东西),您可以使用 lists() to get a list of relevant ProjectType ids, then whereIn()过滤该列表中的那些:
$projectTypeIds = $user->projectTypes()->where('team_id', $teamid)->lists('id');
$projects = $user->projects()->whereIn('projecttype_id', $projectTypeIds)->get();