我正在使用Laravel 5.2建立一个网站
我想做的是
INSERT
同时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
不属于Eloquent
。 Eloquent
会触发时间戳,但Query Builder
却没有。
所以我的问题是:
insert
方法一次可以接受3行,但是如何手动触发时间戳? 1.
我试图在数组的每个项目中添加'created_at' => date('Y-m-d H:i:s'),
。但控制器不清楚可怕。 create
方法以触发时间戳? create
是个好主意吗? PS。 protected $guarded = []
已分配给空数组,因此不会收到批量分配例外。
非常感谢你。
答案 0 :(得分:4)
insert()
是查询构建器的一部分,因此它不使用Eloquent功能。
您无法将3个项目传递给create()
方法,只能传递一个。{p>使用create()
内部循环是一个糟糕的主意。
您应该在批量插入时手动添加这些字段:
[
'application_id' => $applications[0]->a_id,
'group_id' => $group->id,
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
答案 1 :(得分:0)
您可以使用dateTime
课程:
[
'application_id' => $applications[0]->a_id,
'group_id' => $group->id,
'created_at' => new \dateTime,
'updated_at' => new \dateTime,
],