2013-07-30 26 views
22

Có ai biết nếu nó là possitble để làm folowing:Laravel: hùng biện như thế nào để cập nhật một mô hình và các mô hình có liên quan trong một đi

Hãy nói rằng chúng tôi có một mô hình gọi là người dùng và một mô hình calledd bạn thân. Mối quan hệ giữa Người dùng và người bạn thân nhất là 1: 1.

Tôi muốn cho những trường hợp này có thể làm điều gì đó như thế này, thay đổi thành phố và thành phố của bạn tôi cùng một lúc.

$me = User::find(1); 

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

Vì vậy, về cơ bản tôi muốn biết liệu Eloquent có đủ thông minh để hiểu mối quan hệ dựa trên khóa mảng 'bestfriend.city' hay không.

Cảm ơn bạn đã giúp đỡ!

Cập nhật:

Tìm thấy giải pháp trên các diễn đàn Laravel nhưng im đăng nó ở đây cũng như nếu ai đó đang tìm kiếm điều tương tự :)

Trong mô hình bạn thêm

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

Và sau đó bạn có thể gọi nó như thế này

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

Làm việc như một sự quyến rũ!

+3

Bạn có thể đăng cập nhật của mình dưới dạng câu trả lời cho câu hỏi của mình và chấp nhận câu hỏi thay vì cập nhật. – dimo414

Trả lời

4

Eloquent khá thông minh, nhưng tôi không tin rằng nó có thể làm điều đó. Bạn sẽ phải cập nhật người dùng và BestFriend một cách độc lập. Nhưng một khi bạn đã làm điều đó, Eloquent không có phương pháp để gắn hai.

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

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

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

Đây là khóa học giả mô hình tài khoản của bạn có chức năng giống như ...

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

Cảm ơn câu trả lời của bạn :) Tôi đã tìm thấy một giải pháp trên diễn đàn Laravel và đăng nó vào thư gốc của tôi vì vậy nếu những người khác tìm kiếm cùng một điều họ sẽ có câu trả lời ngay lập tức :) – MvdP

5

Bạn không cần phải cài đặt nó trên mô hình của bạn. Bạn có thể làm điều đó trên bộ điều khiển của bạn như thế này.

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

Tôi vừa sửa đổi bản cập nhật của bạn một chút.

Các vấn đề liên quan