【问题标题】:Eloquent insert multiple records into related modelEloquent 向相关模型中插入多条记录
【发布时间】:2015-09-28 02:40:19
【问题描述】:

我正在处理四个不同的表。 usersactivityfeedsfriends

friends 是用户表(user_id 和friend_id)中存在两个外键的表。

activity 是举行某些活动的表。

feeds 是具有两个外键的表,subscriber_id(用户的朋友的 id)和 activity_id。当用户发布内容时,我想将记录插入到提要表中,以便他的朋友会看到他的状态更新。我希望到目前为止很清楚。因此,如果用户有 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();
    }

User 模型中的好友关系。

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`)

【问题讨论】:

    标签: eloquent laravel-5.1


    【解决方案1】:
    $feed->subscriber_id = Auth::user()->friends 
    

    失败是因为朋友是一个集合,而您正试图将其分配给单个值。

    我不确定在架构上您为什么需要提要表。您可以通过查询某些加入的活动来获取某人朋友的活动列表。

    话虽如此,据我所知,更新该提要表的唯一方法是像您在第一个示例中所做的那样遍历所有朋友。我不确定是什么使它不是“Laravel 方式”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多