基于数组中的记录创建多个行-Laravel

时间:2019-07-31 03:57:48

标签: php laravel

我有以下查询,它带回了一个user_id数组,每个用户都将收到通知。

$pstusrmembs = DB::table('postusrs')
                    ->where('post_id', $post_id)
                    ->where('accepted', 1)
                    ->pluck('user_id');

我需要在下面的“插入”代码中将每个user_id放在不同的行中:

                      $notifs = new Notif();
                      $notifs->rec_uid = $pstusrmembs;
                      $notifs->title = $post_title;
                      $notifs->save();

如何更改$notifs->rec_uid = $pstusrmembs;来做到这一点?

2 个答案:

答案 0 :(得分:1)

为此使用for循环

foreach($pstusrmembs as $userID){
        $notifs = new Notif();
        $notifs->rec_uid = $userID;
        $notifs->title = $post_title;
        $notifs->save();
}
  

如果您正在使用“批量分配”概念

foreach ($pstusrmembs as $userID) {
    Notif::create(['rec_uid' => $userID, 'title' => $post_title]);
  }
  

如果您正在使用“批量分配”概念没有任何模型   活动或听众

foreach ($pstusrmembs as $userID) {
     $arrayOfNotif[] = ['rec_uid' => $userID, 'title' => $post_title];
  }

  Notif::insert($arrayOfNotif);

答案 1 :(得分:0)

我建议即使在系统故障的情况下,也要使用数据库事务来保持数据库的一致性,并将该列表准备为数组并插入一行....

$prepare = [];
foreach($pstusrmembs as $p) {
  $prepare[] = [
    'rec_id' => $p,
    'title' => $post_title
  ];
}
DB::beginTransaction();
try {
   Notif::insert($prepare);
   DB::commit();
} catch (Exception $e) {
   DB::rollback();
}