【发布时间】:2016-11-03 10:41:27
【问题描述】:
我的应用程序中有以下模型
- 用户
- 组
- 任务
有以下关系
- 用户和组具有多对多关系
- Task 和 Group 是多对多的关系
所以基本上一个用户可以属于多个组,每个组可以有多个任务。
以下是表结构。
用户
- 身份证
- 姓名
群组
- 身份证
- 姓名
任务
- 身份证
- 姓名
group_user
- 身份证
- group_id(组表的外键)
- user_id(用户表的外键)
group_tasks
- 身份证
- group_id(组表的外键)
- task_id(任务表的外键)
现在我要检索用户的所有任务。
我尝试了以下方法,但均无效。
方法 1
-
$user->groups()为用户提供组列表 -
$group->tasks()给出了一个组的任务列表
所以我尝试了
$user->groups()->tasks() 但没用。
方法 2
我尝试将 Has Many Through 添加到我的用户模型中
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::with('groups.tasks') -
@z3r0ck 抱歉,不确定我是否理解您的建议。你能再解释一下吗?我有需要检索任务的
User对象。 -
好的,在这种情况下你可以这样做
$user->load('groups.tasks'); -
@z3r0ck 这只会给我一个 User 模型的实例。如何从中访问任务?我刚刚检查过,它没有任何任务属性。
-
这个很棘手...您不能直接使用 has many through 因为您有两个数据透视表...我想您可以使用 Collections 来做到这一点,但是如果您这样做效率不高有大数据集。尝试在网络上查找“Laravel 有很多透视表”。
标签: php laravel eloquent laravel-5.2