gpt4 book ai didi

laravel - Laravel Eloquent一次插入带有时间戳的3行

转载 作者:行者123 更新时间:2023-12-05 00:16:48 33 4
gpt4 key购买 nike

我正在使用Laravel 5.2创建站点

我想做的是

  • INSERT同时3行
  • 新的3行必须包含时间戳created_at updated_at

  • 使用 Query Builder方法 insert,是的,它确实通过传递一个数组来一次插入3行:
    GroupRelation::insert([
    [
    'application_id' => $applications[0]->a_id,
    'group_id' => $group->id,
    ],
    [
    'application_id' => $applications[1]->a_id,
    'group_id' => $group->id,
    ],
    [
    'application_id' => $applications[2]->a_id,
    'group_id' => $group->id,
    ],
    ]);

    上面的代码工作正常。但这无法触及时间戳。这意味着 created_at updated_at将为空。

    但是,如果我将 insert方法更改为 create:
    GroupRelation::create([
    ...
    ]);

    它收到错误:
    ErrorException in Model.php line 2983:
    preg_match() expects parameter 2 to be string, array given

    如果我没看错,似乎 create可以同时接受1行,对吧?

    我知道 insert不属于 EloquentEloquent触发时间戳,但 Query Builder不触发。

    所以我的问题是:
  • insert方法可以一次接受3行,但是如何手动触发时间戳?
  • 通过1.,我尝试在数组的每个项目上添加'created_at' => date('Y-m-d H:i:s'),。但是 Controller 不清楚并且可怕。
  • 如何将3个项目的数组传递给create方法以触发时间戳?
  • 在循环内调用create是一个好主意吗?

  • PS。 protected $guarded = []已分配给空数组,因此不会收到“批量分配异常”。

    非常感谢。

    最佳答案

    insert()是查询生成器的一部分,因此它不使用Eloquent功能。

    您不能将3个项目传递给create()方法,只能传递一个。在循环内使用create()是一个糟糕的主意。

    批量插入时,您应该手动添加以下字段:

    [
    'application_id' => $applications[0]->a_id,
    'group_id' => $group->id,
    'created_at' => Carbon::now(),
    'updated_at' => Carbon::now(),
    ],

    关于laravel - Laravel Eloquent一次插入带有时间戳的3行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41366330/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com