2016-06-09 77 views
0

我想從數據庫查詢中訪問數據,我認爲這需要一個連接。我擁有的用戶可以與衆多小組分開。我正在使用belongsToMany 關係。我的模型是這樣的加入透視表訪問數據

class User extends Model 
{ 
    protected $table = 'users'; 
    protected $guarded = []; 

    public function group() 
    { 
     return $this->belongsToMany('App\Group', 'users_user_groups')->withPivot('user_id', 'group_id'); 
    } 
} 

class Group extends Model 
{ 
    protected $table = 'user_groups'; 
    protected $guarded = []; 
    use SoftDeletes; 

    public function user() 
    { 
     return $this->belongsToMany('App\User', 'users_user_groups')->withPivot('user_id', 'group_id'); 
    } 
} 

當我運行一切我也需要,我可能會得到如下的數據。

users 
+----+---------------+ 
| id | name   | 
+----+---------------+ 
| 1 | John Doe  |  
+----+---------------+ 

user_groups 
+----+---------------+-----------------+ 
| id | name   | description  | 
+----+---------------+-----------------+ 
| 1 | Group AA  | Something  |  
+----+---------------+-----------------+ 
| 2 | Group BB  | Something  |  
+----+---------------+-----------------+ 

users_user_groups 
+----+---------------+-----------------+ 
| id | user_id  | group_id  | 
+----+---------------+-----------------+ 
| 1 | 1    | 1    |  
+----+---------------+-----------------+ 
| 2 | 1    | 2    |  
+----+---------------+-----------------+ 

所以我知道id爲1的用戶屬於具有的1和2的id是什麼,我試圖做的就是抓住所有的數據庫中誰 屬於名爲admin將USER_GROUP用戶的user_groups 。所以,我想這樣的事情

DB::table('users')->select('userName') 
    ->join('user_groups', 'users_user_groups') 
    ->where('name', '=', 'admin')->get(); 

這個我知道全錯了,我怎麼能使用belongsToMany和數據透視表時,得到一組內的所有用戶?

謝謝

回答

1

Eloquent使用關係,而不是查詢生成器。

你可以實現你做這樣的事情瞄準什麼:

$group = Group::where('name', 'admin')->first(); 
$users = $group->users; // Where users is the name of your relationship (At the moment you have user) 

引擎蓋下,會做兩個SQL語句和它們雄辯對象一起映射,而不是加入。該語句將是這個樣子:

select * from user_groups where name = ? and deleted_at is not null limit 1 
select * from users where id in (?, ?) 

當你有一個實例Group通過調用它,彷彿它是一個屬性執行的關係。因此在那之後$users將包含User實例的集合,因此您可以通過它們循環:

foreach ($users as $user) { 
    // Do something with $user 
}