2017-07-27 43 views
2

如果尚未附加關係,是否有附加關係的快速方式?我正在使用此代碼更新模型的關係;如果尚未附加Laravel關係,請附上

 if (!empty($request->get('roles')) && is_array($request->get('roles'))) { 
      $message->Roles()->attach($request->get('roles')); 
     } 
     if (!empty($request->get('users')) && is_array($request->get('users'))) { 
      $message->Users()->attach($request->get('users')); 
     } 

但我得到這個錯誤,我是這個錯誤;

SQLSTATE [23000]:完整性約束違規:用於密鑰 '主要'(SQL 1062重複條目 '1-41':插入到message_usermessage_iduser_id)值(1,41),(1,42 ),(1,43),(1,44),(1,45),(1,46),(1,47),(1,48),(1,49),(1,50))

我想避免通過一個非常長的數組列表檢查哪些用戶尚未連接並附加它們。也讓我知道這是否是唯一的方法。

我在想這樣的事情;

$message->Users()->attachIfNotAttached($request->get('users')); 
+0

MySQL支持'INSERT IGNORE',但我不認爲laravel也會做。 –

+0

我認爲唯一的解決方案是在連接之前檢查每個用戶是否存在關係。 – LogicDev

+0

什麼存儲在'$ request-> get('users')'?用戶ID? –

回答

1

像這樣的東西可能會奏效:

把那已經連接的ID:

$newIds = array_diff($request->get('users'), $attachedIds); 

附上:

$attachedIds = $message->Users()->whereIn('id', $request->get('users'))->pluck('id'); 

從請求陣列除去附着的標識新ID:

$message->Users()->attach($newIds); 
+0

謝謝。這是我一直在尋找的。 – LogicDev

2

Laravel有內置的方法這一點 - syncWithoutDetaching

$message->Users()->syncWithoutDetaching($request->get('users'));