2014-06-13 48 views

回答

9

您來決定:sync有2個參數默認爲true並負責拆卸:

$model->relationship()->sync([1,2,3]); 

$model->relationship()->sync([4,5,6]); // attached [4,5,6], detached [1,2,3] 
$model->relationship()->getRelatedIds(); // [4,5,6] 

// but: 
$model->relationship()->sync([4,5,6], false); // attached [4,5,6], detached [] 
$model->relationship()->getRelatedIds(); // [1,2,3,4,5,6] 
+0

謝謝,很高興知道。我可以看到這是有道理的。 –

+0

哇。我不能相信這不在文檔http://laravel.com/docs/4.2/eloquent –

+0

但是,如果我刪除所有的標籤,'sync()'什麼都不做。你怎麼能在這種情況下工作?例如,如果以前在關係表中有'[1,2,3]',並且想要創建'sync([])',因爲您已經從Select2中刪除了所有標記。你如何刪除所有的標籤呢? – Pathros

0

答案是肯定的。我找不到任何實際上表明過的文件。

可以說你有兩個表:「作者」和「書籍」,帶有一個數據透視表「book_authors」。

$author_id =2; 
$author->books()->sync(array(1,4,5,15)); 

現在,你必須在數據透視表 「book_authors」 4項:

author_id book_id 
2   1 
2   4 
2   5 
2   15 

現在更新:

$author_id =2; 
$author->books()->sync(array(1,15)); 

現在是「創建一個新的作家時

book_authors「是:

author_id book_id 
    2   1 
    2   15 
+1

我可以證實。 'sync()'方法應該刪除不再存在的關係,並保留仍然相關的關係。 – Andreyco

+0

但是,如果我刪除所有標籤,則sync()根本不會執行任何操作。你怎麼能在這種情況下工作?例如,如果以前在關係表中有[1,4,5,15],並且想要進行同步([]),因爲您已從Select2中刪除了所有標記。你如何刪除所有的標籤呢? – Pathros