2015-09-28 66 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的方式”。