2015-10-26 63 views
1

我發佈之前搜索,我發現這個laravel:防止數據透視表一式兩份雙

Preventing Laravel adding multiple records to a pivot table

但是,如果我嘗試的解決方案,我得到了有關查詢生成器使用包含的()

異常我需要檢查一個項目是否已經附加到數據透視表中的用戶,以防止多個帖子:

這一個是我嘗試的行:

if (!Auth::user()->collected_item()->contains($id)) { 

Auth::user()->collected_item()->attach($id);  

} 

但據說這是行不通的。 所以,我建立了一個查詢,以檢查行user_id/id是否已經在數據庫中存在,如果結果var是空的附加項目別的打印「已經存在」..這種方式可以工作,但可以簡化嗎?

+1

[防止Laravel添加多個記錄透視表]中可能的複製(http://stackoverflow.com/questions/17472128/preventing-laravel-加入多個記錄到一個數據透視表) – totymedli

回答

2

哦該死!我解決了它改變:

if (!Auth::user()->collected_item()->contains($id)) 

if (! Auth::user()->collected_item->contains($id)) 
+0

也許這樣做不會使用'contains()'首先進行額外的檢查:'Auth :: user() - > collected_item() - > sync([$ id],$ detach = false);'。關於2nd param'$ detach = false'的重要提示是'sync()'否則會刪除除'$ id'之外的所有行。 –

+0

謝謝,但會刪除附加到用戶的所有其他項目。 – Chriz74

+0

正如我已經提到的:將'false'作爲sync()的第二個參數傳遞不會分離其他記錄。請參閱Eloquent API:http://laravel.com/api/5.1/Illuminate/Database/Eloquent/Relations/BelongsToMany.html#method_sync或http://stackoverflow.com/a/24211767/197487 –