Php 通过对Laravel中的多对多关系进行多通来检索远程关系
我的应用程序中有以下型号 使用者 组 任务 哪些有以下关系 用户和组具有多对多关系 任务和组具有多对多关系 因此,基本上一个用户可以属于多个组,每个组可以有多个任务 以下是表格结构 使用者 身份证件 名称 团体 身份证件 名称 任务 身份证件 名称 组用户 身份证件 group_id带groups表的外键 用户id外键与用户表 小组任务 身份证件 group_id带groups表的外键 任务id外键与任务表 现在我想检索用户的所有任务 我尝试了以下方法,但都不起作用 方法1 $user->groups为用户提供组列表 $group->tasks提供组的任务列表 所以我试过了 $user->groups->tasks,但它不起作用 方法2 我尝试将其添加到我的用户模型中Php 通过对Laravel中的多对多关系进行多通来检索远程关系,php,laravel,eloquent,laravel-5.2,Php,Laravel,Eloquent,Laravel 5.2,我的应用程序中有以下型号 使用者 组 任务 哪些有以下关系 用户和组具有多对多关系 任务和组具有多对多关系 因此,基本上一个用户可以属于多个组,每个组可以有多个任务 以下是表格结构 使用者 身份证件 名称 团体 身份证件 名称 任务 身份证件 名称 组用户 身份证件 group_id带groups表的外键 用户id外键与用户表 小组任务 身份证件 group_id带groups表的外键 任务id外键与任务表 现在我想检索用户的所有任务 我尝试了以下方法,但都不起作用 方法1 $user->gro
public function tasks()
{
return $this->hasManyThrough(Task::class, Group::class);
}
但即使这样也不行。下面是我得到的错误
QueryException in Connection.php line 713:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'groups.user_id' in 'field list' (SQL: select `tasks`.*, `groups`.`user_id` from `tasks` inner join `groups` on `groups`.`id` = `tasks`.`group_id` where `groups`.`user_id` = 1)
我猜这是因为它期待一对多的关系,但我有一个多对多的关系
那么,有没有一种方法可以在不获取所有组的情况下检索它,然后在它们之间循环
User Model
public function groups()
{
return $this->belongsToMany('App\Group');
}
Group Model
public function tasks()
{
return $this->belongsToMany('App\Task');
}
Task Model
public function groups()
{
return $this->belongsToMany('App\Group');
}
正在检索用户的所有任务
$user = User::find(1);
$user->load('groups.tasks');
$tasks = $user->groups->pluck('tasks')->collapse();
正在检索用户的所有任务
$user = User::find(1);
$user->load('groups.tasks');
$tasks = $user->groups->pluck('tasks')->collapse();
您还可以在此处查看HasManyThrough的扩展: 它可以帮助您检索关系的许多子级别。 在你的情况下,应该是 用户->归属组->blongsToMany任务 只需将您的方法添加到用户模型中,如下所示:
public function tasks()
{
return $this->hasManyDeep(
'App\Task',['App\Group']
);
}
您还可以在此处查看HasManyThrough的扩展: 它可以帮助您检索关系的许多子级别。 在你的情况下,应该是 用户->归属组->blongsToMany任务 只需将您的方法添加到用户模型中,如下所示:
public function tasks()
{
return $this->hasManyDeep(
'App\Task',['App\Group']
);
}
您可以使用'groups.tasks'@z3r0ck尝试此用户::抱歉,不确定我是否理解您的建议。你能再解释一下吗?我有一个需要检索任务的用户对象。好的,在这种情况下,你可以这样做$User->load'groups.tasks'@z3r0ck只会给我一个用户模型的实例。如何从it访问任务?我刚检查过,它没有任何任务属性。这一个很棘手。。。您不能直接使用has MULTY THORT,因为您有两个透视表。。。我想你可以用集合和所有东西来做,但如果你有大数据集,那就不是很有效了。尝试查找Laravel在web上有许多透视表。您可以尝试此用户::with'groups.tasks'@z3r0ck抱歉,不确定我是否理解您的建议。你能再解释一下吗?我有一个需要检索任务的用户对象。好的,在这种情况下,你可以这样做$User->load'groups.tasks'@z3r0ck只会给我一个用户模型的实例。如何从it访问任务?我刚检查过,它没有任何任务属性。这一个很棘手。。。您不能直接使用has MULTY THORT,因为您有两个透视表。。。我想你可以用集合和所有东西来做,但如果你有大数据集,那就不是很有效了。尝试寻找Laravel在web上有许多透视表。您是否也可以发布您最终访问任务的方式?您是否正在使用$user->groups->tasks?您是否也可以发布如何访问任务?您是否正在使用$user->group->tasks?