2017-05-29 84 views
1

我想將一個組分配給有角色學生並且也有特定選定組的用戶。有一個用戶表,它具有數據透視表:role_user和group_user角色和組表。下面是在那裏我試圖執行查詢控制器代碼:Laravel two wherehas查詢不起作用

$this->validate($request, [ 
    'add-group'  => 'required', 
    'where-group' => 'required' 
]); 

$selectedGroup = $request->input('add-group'); 
$whereGroupId = $request->input('where-group'); 
$users   = User::whereHas('roles', function($q) { 
        $q->where('name', 'student'); 
       })->whereHas('groups', function($q) { 
        $q->where('id', $whereGroupId); 
       })->get(); 

$selectedGroup = Group::whereId($selectedGroup)->first(); 
$users->assignGroup($selectedGroup); 

回答

1

您需要使用orWhereHas子句查詢的下半年。

其次,您的$whereGroupId變量不在內函數的作用域中,請添加use($whereGroupId)語句以將其包含在函數的作用域中。

$users = User::whereHas('roles', function($q) { 
    $q->where('name', 'student'); 
})->orWhereHas('groups', function($q) use ($whereGroupId) { // <-- Change this 
    $q->where('id', $whereGroupId); 
})->get(); 
0

你缺少一個use聲明帶來$whereGroupId到範圍爲whereHas關閉。

$this->validate($request, [ 
    'add-group'  => 'required', 
    'where-group' => 'required' 
]); 

$selectedGroup = $request->input('add-group'); 
$whereGroupId = $request->input('where-group'); 

$users = User::whereHas('roles', function ($query) { 
     return $query->where('name', 'student'); 
    }) 
    ->whereHas('groups', function ($query) use ($whereGroupId) { 
     return $query->where('id', $whereGroupId); 
    }) 
    ->get(); 

$selectedGroup = Group::whereId($selectedGroup)->first(); 
$users->assignGroup($selectedGroup); 
0

您有語法錯誤,並且缺少use以通過whereGroupId。我不知道assignGroup做什麼,但是這應該修復你的代碼。

$this->validate($request, [ 
    'add-group' => 'required', 
    'where-group' => 'required' 
]); 

$selectedGroup = $request->input('add-group'); 
$whereGroupId = $request->input('where-group'); 

$users = User::whereHas('roles', function ($q) { 
     $q->where('name', 'student'); 
    }) 
    ->whereHas('groups', function ($q) use ($whereGroupId) { 
     $q->where('id', $whereGroupId); 
    })->get(); 

$selectedGroup = Group::whereId($selectedGroup)->first(); 

$users->assignGroup($selectedGroup); 
+0

assignGroup應該爲用戶分配一個組。然而,我得到了上述問題的解決方案,assignGroup出現了另一個問題。我只能將一個組只分配給一個用戶,而不是像預期的那樣多。我將就此發起另一個問題。 – Valentine

+0

通過對每個用戶使用foreach並分別分配它們來解決assignGroup問題。 – Valentine