2013-07-30 9 views
22

Czy ktoś wie, czy jest possitble wykonać folowing:laravel: Eloquent jak zaktualizować model i podobnych modeli w jednym iść

Powiedzmy mamy model o nazwie użytkownika i model calledd Bestfriend. Relacja między Użytkownikiem a najlepszym przyjacielem wynosi 1: 1.

Chciałbym, aby te sprawy były w stanie zrobić coś takiego, zmienić moje miasto i miasto mojego przyjaciela w tym samym czasie.

$me = User::find(1); 

$me->update(array(
'city' => 'amsterdam', 
'bestfriend.city' => 'amsterdam' 
)); 

Więc w zasadzie chciałbym wiedzieć, czy Eloquent jest wystarczająco inteligentny, aby zrozumieć związek oparty na kluczu tablicy „bestfriend.city”.

Z góry dziękuję za pomoc!

Aktualizacja:

znaleźć rozwiązanie na forum laravel ale im umieszczenie go również tutaj, jeśli ktoś poszukuje tej samej rzeczy :)

w modelu dodasz

// In your model... 
public function setBestFriendArrayAttribute($values) 
{ 
    $this->bestfriend->update($values); 
} 

a następnie można nazwać tak

$me->update(array(
    'city' => 'amsterdam', 
    'BestFriendArray' => array(
     'city' => 'amsterdam' 
    ) 
)); 

Działa jak urok!

+3

Możesz opublikować aktualizację jako odpowiedź na swoje pytanie i zaakceptować ją, a nie aktualizację. – dimo414

Odpowiedz

4

Epoquent jest dość sprytny, ale nie wierzę, że może to zrobić. Będziesz musiał zaktualizować User i BestFriend niezależnie. Ale kiedy już to zrobisz, Eloquent ma metody na połączenie tych dwóch.

$me = User::find(1); 
$bff= BestFriend::find(1); 

$me->city = 'amsterdam'; 
$bff->city = 'amsterdam'; 

$me->bestfriend()->associate($bff); 

Jest to oczywiście przy założeniu modelu użytkownik ma funkcję, która wygląda jak ...

public function bestfriend() 
{ 
    return $this->hasOne('BestFriend'); 
} 
+1

Dziękuję za odpowiedź :) Znalazłem rozwiązanie na forach Laravel i wysłałem je do mojej oryginalnej wiadomości, więc jeśli inni wyszukają to samo, odpowiedzą od razu :) – MvdP

5

Nie potrzeba, aby ustawić go na modelu. Możesz to zrobić na swoim kontrolerze w ten sposób.

$me = User::find(1)->bestFriend()->update(array(
'city' => 'amsterdam', 
'bestfriend.city' => 'amsterdam' 
)); 

Właśnie zmodyfikowałem twoją aktualizację.

Powiązane problemy