2014-09-26 112 views
7

這是事情,我有3個表,用戶/ users_types /類型。與Laravel同步或updateExistingPivot - 如何填寫基於第三critria

我在用戶和類型之間有一個belongsToMany,通過users_types,其中有一些信息的關鍵。 其中之一是表單中的行號。 我想基於用戶ID和行號更新表,但不是typeID,後者是由我的輸入填充。

我該如何做到這一點? 我一直在努力

updateExistantPivot($line_number->line_number,array(
                 'type_id' => $type_id, 
                 'etc'    => $etc, 
                 'duration'   => $duration 
                ) 
               ); 

但很明顯,因爲它希望TYPEID代替LINE_NUMBER它不會工作......我一直想更新同一LINE_NUMBER &用戶ID。 (我在每行的for循環中)。

感謝您的幫助!

哦,我嘗試了同步...但它給了我一個外鍵錯誤,因爲它發送的數字不應該在那裏。

回答

10

如果您想更新現有支點,你可以這樣做:

$model; // parent of the relation 
$related; // related object already synced with the $model 

$model->relation()->sync([$related->id => [ 'duration' => 'someValue'] ], false); 

1參數是陣列與相關模型ID爲重點,和樞軸值數組進行更新,而第二個參數組到false手段,你不會分離所有其他相關模型。

+0

嘿@JarekTkaczyk OMG!非常感謝 !!!它的工作,但我不得不改變虛假爲了更新,而不是每次重新創建一個新的行!來自Laravel的文件沒有解釋得那麼好!再次感謝! – commandantp 2014-09-26 17:53:49

+1

不是真的 - 當你使用sync時,沒有任何東西被重複,而是更新。如果你使用'attach',那麼是的,你會創建新的pivot條目evry時間。請注意,如果不使用「false」,則會重置給定模型的所有數據透視條目,並僅添加提供的數據。 – 2014-09-26 18:32:48

+0

是的,我確實使用附加來創建該條目 - 爲什麼然後我不得不使用false?嗯......數據傳輸到桌面後,數據透視是否重置,這有什麼關係?當我做錯事情時我注意到,當出現錯誤並且代碼停止時,我的簡單同步正在刪除整個條目。仍然困惑於數據透視的工作原理是否誠實......我明白這是一個臨時數組,它通過信息創建了所有鏈接表+來自鏈接表(您定義的)的數據......是否正確?謝謝! – commandantp 2014-09-26 20:23:47