2016-07-01 63 views
0

我在我的應用程序檢索遙遠的關係,通過具有一對多,通過對許多一對多在Laravel

  • 用戶
  • 集團以下車型
  • 任務

關係其具有以下關係

  • User and Gr牛津大學出版社有很多一對多的關係
  • 任務和組有許多一對多的關係

所以基本上用戶可以屬於多個組,每個組可以有多個任務。

以下是表結構。

用戶

  • ID

  • ID

任務

  • ID

GROUP_USER

  • ID
  • GROUP_ID(含組表的外鍵)
  • USER_ID(與用戶表的外鍵)

group_tasks

  • ID
  • GROUP_ID(含組表的外鍵)
  • task_id(帶任務表的外鍵)

現在我想檢索用戶的所有任務。

我試過以下方法,兩者都不起作用。

方法1

  • $user->groups()給組的用戶
  • $group->tasks()列表給出的任務列表的一組

所以,我想

$user->groups()->tasks()但它沒有工作。

方法2

我加入這我的用戶模型

public function tasks() 
{ 
    return $this->hasManyThrough(Task::class, Group::class); 
} 

但即使沒有工作,試圖Has Many Through。下面是我得到

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) 

我的猜測錯誤的是,這種情況正在發生,因爲它是一個期待,一對多的關係,但我有一個多一對多的關係。

那麼有沒有辦法在沒有獲得所有組並且通過它們循環的情況下檢索它?

+0

你可以試試這個'用戶::使用(「groups.tasks」)' – z3r0ck

+0

@ z3r0ck對不起不知道如果我理解你的建議。你能解釋一下嗎?我有我需要檢索任務的'User'對象。 – Sudar

+0

好的,那麼在這種情況下,你可以這樣做'$ user-> load('groups.tasks');' – z3r0ck

回答

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(); 
+0

你也可以請張貼你如何最終訪問任務?你使用'$ user-> groups() - > tasks()'? – Sudar

+0

@Sudar我更新了我的答案。 – z3r0ck

+0

這工作。謝謝。 – Sudar