2015-09-28 61 views
0

我正在處理四個不同的表格。 users,activity,feedsfriendsEloquent插入多個記錄到相關模型中

friends是用戶表中存在兩個外鍵(user_id和friend_id)的表。

activity是某些活動持有的表格。

feeds是有兩個外鍵,subscriber_id(用戶的朋友的ID)和activity_id的表。當用戶發佈內容時,我想將記錄插入到Feed表中,以便他的朋友可以看到他的狀態更新。我希望迄今爲止很清楚。所以如果有20個用戶的朋友,將會有20個插入。

當然,我可以做下面的事情,但這不是「Laravel的方式」。

$friends = Auth::user()->friends; 
    foreach ($friends as $friend) { 
     $feed = new Feed; 
     $feed->subscriber_id = $friend->id; 
     $feed->activity_id = $status->id; 
     $feed->save(); 
    } 

用戶模型中的朋友關係。

public function friends() { 
    return $this->belongsToMany('App\Models\User', 'friends', 'user_id', 'friend_id'); 
} 

插入控制器

$status = new Activity; 
$status->user_id = Auth::user()->id; 
$status->status = Request::input("text"); 
$status->activity_type_id = 1; 
$result = $status->save(); // OK, status is saved now. 

if($result) { 
    // insert data into feeds table 
    $feed = new Feed; 
    $feed->subscriber_id = Auth::user()->friends; 
    $feed->activity_id = $status->id; 
    $feed->save(); 
} 

它提供了異常。

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`testdatabase`.`feeds`, CONSTRAINT `feeds_ibfk_1` FOREIGN KEY (`subscriber_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) (SQL: insert into `feeds` (`subscriber_id`, `activity_id`, `updated_at`, `created_at`) 

回答

2
$feed->subscriber_id = Auth::user()->friends 

失敗,因爲朋友是一個集合,你想將其分配到一個單一的值。

我不確定架構上爲什麼你會想要的飼料表。您可以通過對某些連接的活動進行查詢來獲得某人朋友的活動列表。

這就是說,據我所知,更新feed表的唯一方法是循環所有的朋友,就像你在第一個例子中做的那樣。我不確定是什麼讓這不是「Laravel的方式」。