2017-06-01 59 views
0

我需要更新連接用戶,我有用戶重視的項目,我需要通過增加新的附加用戶編輯的項目,所以我的代碼看起來像這樣更新連接用戶Laravel 5.4重複的用戶已經attched

$project = Project::find($id); 
      $project->update($request->all()); 

      $array = $project->users; 
      foreach ($array as $item){ 
       if($request->input('user_id') != $item->id){ 
        Log::info('user new ids: ',[$item->id]); 
        $project->users()->attach($request->input('user_id')); 
       } 
       else{ 
        Log::info('user aleardy attached'); 
       } 
      } 

     return response()->json($organisation); 

這代碼重複的用戶數據庫中我發現同樣的用戶分配到項目多次
另外這個代碼只是爲了連接,那麼如何解決這個問題,並感謝

回答

2

你通過附加到項目的每個用戶循環。在每次迭代中,您將檢查id是否與提交的user_id匹配。對於幾乎所有的迭代,這將評估爲false,並且用戶將再次連接。

例如: 用戶4,5,6附加到該項目。 user_id = 2

的循環會導致如下:

4!=2,使連接用戶。

5!=2,所以附加用戶。

6!=2,所以附加用戶。

正如你所看到的,用戶將被添加3次。

我會用這樣的:

if ($project->users()->where('users.id',$request->input('user_id'))->count()==0){ 
    Log::info('user new ids: ',[$item->id]); 
    $project->users()->attach($request->input('user_id')); 
}else{ 
    Log::info('user aleardy attached'); 
} 

上面的查詢將尋找附着在項目匹配提交的user_id任何用戶。如果計數爲0,則user_id未附加到該項目,因此您可以附加該項目。

+0

謝謝@Brad我得到這個錯誤,SQLSTATE [23000]:完整性約束違規:1052列'id'在where子句是不明確的(SQL:select count(*)as aggregate – Akram

+0

已更新的答案。指定表名(users.id而不只是id) – Brad

+0

感謝您的回答 – Akram