2013-07-30 10 views
22

Qualcuno sa se è possitble per fare il folowing:laravel: Eloquente come aggiornare un modello e modelli correlati in una volta

Diciamo che abbiamo un modello chiamato utente e un modello calledd BestFriend. La relazione tra l'utente e il migliore amico è 1: 1.

Vorrei che questi casi potessero fare qualcosa del genere, cambiare la mia città e la città del mio amico allo stesso tempo.

$me = User::find(1); 

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

Quindi, in pratica vorrei sapere se Eloquente è abbastanza intelligente per capire il rapporto basato sulla chiave dell'array 'bestfriend.city'.

Grazie in anticipo per qualsiasi aiuto!

Aggiornamento:

trovato la soluzione sul forum laravel ma im postando qui così se qualcun altro sta cercando la stessa cosa :)

Nel modello si aggiunge

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

E poi si può chiamare in questo modo

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

Funziona come un fascino!

+3

È possibile pubblicare l'aggiornamento come risposta alla domanda e accettarlo anziché come aggiornamento. – dimo414

risposta

4

Eloquent è abbastanza intelligente, ma non credo che possa farlo. Dovresti aggiornare User e BestFriend in modo indipendente. Ma una volta che lo hai fatto, Eloquent ha metodi per attaccare i due.

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

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

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

Questo è, naturalmente, supponendo che il modello User ha una funzione che sembra ...

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

Grazie per la vostra risposta :) Ho trovato una soluzione nei forum di Laravel e l'ho inserita nel mio messaggio originale, quindi se gli altri cercano la stessa cosa avranno la risposta subito :) – MvdP

5

Non è necessario impostare sul vostro modello. Puoi farlo sul tuo controller in questo modo.

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

Ho appena modificato un po 'l'aggiornamento.

Problemi correlati