我正在处理四个不同的表格。 users
,activity
,feeds
和friends
。
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`)
答案 0 :(得分:2)
$feed->subscriber_id = Auth::user()->friends
失败,因为朋友是一个集合,而您正在尝试将其分配给单个值。
我不确定您为何会想要Feed表。您只需对具有某些联接的活动进行查询,即可从某人的朋友那里获取活动列表。
话虽如此,据我所知,更新feed表的唯一方法是遍历所有像你在第一个例子中所做的那样的朋友。我不确定是什么原因导致的不是" Laravel方式"。