2013-07-30 2 views
22

Wer weiß, ob es possitble ist die Folowing zu tun:Laravel: Eloquent, wie ein Modell und verwandte Modelle in einer aktualisieren gehen

Lassen Sie uns sagen, wir haben ein Modell namens User und ein Modell BestFriend calledd. Die Beziehung zwischen dem Benutzer und dem besten Freund ist 1: 1.

Ich möchte für diese Fälle in der Lage sein, so etwas zu tun, ändern Sie meine Stadt und die Stadt meines Freundes zur gleichen Zeit.

$me = User::find(1); 

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

Also im Grunde möchte ich gerne wissen, ob Eloquent klug genug ist, um die Beziehung auf dem Arrayschlüssel ‚bestfriend.city‘ basiert zu verstehen.

Vielen Dank im Voraus für jede Hilfe!

Update:

die Lösung auf den Laravel Foren gefunden, aber im hier auch veröffentlichen, wenn jemand anderes für die gleiche Sache sucht :)

Im Modell hinzufügen Sie

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

Und Sie können es dann rufen Sie wie folgt

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

Funktioniert wie ein Charme!

+3

Sie können Ihr Update als Antwort auf Ihre Frage veröffentlichen und akzeptieren, anstatt als Update. – dimo414

Antwort

4

Eloquent ist ziemlich schlau, aber ich glaube nicht, dass es das tun kann. Sie müssten Benutzer und BestFriend unabhängig aktualisieren. Aber sobald Sie das getan haben, hat Eloquent Methoden, um die beiden zu verbinden.

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

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

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

Dies ist natürlich Ihr User-Modell angenommen hat eine Funktion, die wie folgt aussieht ...

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

Danke für deine Antwort :) Ich habe eine Lösung in den Laravel-Foren gefunden und sie in meine ursprüngliche Nachricht gepostet. Wenn andere nach der gleichen Sache suchen, haben sie sofort die Antwort :) – MvdP

5

Sie brauchen nicht auf Ihrem Modell zu setzen. Sie können es auf Ihrem Controller so machen.

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

Ich habe gerade Ihr Update ein wenig geändert.

Verwandte Themen