2014-09-26 6 views
7

Tutaj jest rzecz, mam 3 tabele, users/users_types/types.sync lub updateExistingPivot with Laravel - Jak wypełnić na podstawie trzeciej krytyki

Posiadam belongsToMany pomiędzy użytkownikami i typami poprzez users_types, pivot z kilkoma infosami w nim. Jednym z nich jest numer wiersza w formularzu. Próbuję zaktualizować tabelę na podstawie identyfikatora użytkownika i numeru linii, ale NIE na identyfikator typu, który jest wypełniany przez moje dane wejściowe.

Jak mogę to zrobić? staram

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

Ale oczywiście to nie będzie działało, ponieważ chce typeID zamiast LINE_NUMBER ... Zawsze chcesz zaktualizować sam line_number & identyfikator użytkownika. (Jestem w pętli for dla każdej linii).

Dzięki za pomoc!

oh, i spróbowałem z synchronizacją ... ale daje mi błąd klucza obcego, ponieważ wysyła numery, które nie powinny tam być.

Odpowiedz

10

Jeśli chcesz zaktualizować istniejącą pivot, można to zrobić:

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

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

1-ty param to tablica z pokrewnego modelu id jako klucz i tablicy wartości obrotu aktualizacji, natomiast 2. set param do false pomocą , że nie odłączasz wszystkich innych powiązanych modeli.

+0

Hej @JarekTkaczyk OMG! Dziękuję bardzo !!! Udało się, ale musiałem zmienić wartość false na true, aby zaktualizować i nie odtwarzać za każdym razem nowej linii! Dokumentacje Laravel nie wyjaśniają tak dobrze! Dzięki jeszcze raz! – commandantp

+1

Niezupełnie - kiedy używasz 'sync', wtedy nic nie jest duplikowane, ale raczej aktualizowane. Jeśli użyjesz 'attach', wtedy tak, utworzysz nowy czas ewidencji wejścia pivot. Należy pamiętać, że nie używając "false" resetuje wszystkie wpisy przestawne dla danego modelu i dodaje tylko te, które zostały dostarczone. –

+0

Tak, użyłem załącznika do stworzenia tego wpisu - czy to dlatego musiałem użyć fałszywego? Ummmm ... Czy to ma znaczenie, czy oś została wyzerowana, skoro datas wchodzą do tabeli? Zauważyłem, kiedy robiłem coś źle, że moja prosta synchronizacja kasowała cały wpis, gdy wystąpił błąd i kod został zatrzymany. Nadal nie rozumiem, jak działał, aby być uczciwym ... Zrozumiałem, że była to tymczasowa tablica, utworzona z informacjami wszystkich połączonych ze sobą tabel + ze stołu łączącego (które definiujesz) ... czy to prawda? Dzięki! – commandantp