ProductCategory::insert($insertData);
我正在使用以上语句,通过一个数组来插入多个记录$insertData
可以正常工作,但是当检查我的created_at
和updated_at
列时却没有时间戳。
答案 0 :(得分:2)
您必须使用create()
(记住要设置$fillable
):
foreach($insertData as $data) {
ProductCategory::create($data);
}
答案 1 :(得分:0)
insert()
方法是QueryBuilder
的直接SQL语句。它将您的值数组转换为查询语句,以插入而无需使用变异符或其他魔术。
您可以做一些事情来设置这些值。您可以使用ProductCategory::create($array);
为每行数据循环执行一次插入操作。每次插入都会查询。
或者您可以将created_at
和updated_at
值直接添加到数组集合中。 Laravel有一个内置的方法,如果您想遍历\Illuminate\Database\Eloquent\Builder::addUpdatedAtColumn()
并设置它,可以在数组$insertData
上的at列设置更新。如果您查看它,就会发现它仅适用于updated_at
列。您还需要created_at
值。
如果您希望保留一条插入语句,我建议您执行以下操作:
$object = new ProductCategory();
$insertData = array_map(function ($data) use ($object) {
$timestamp = $object->freshTimestampString();
$data[$object->getUpdatedAtColumn()] = $timestamp;
$data[$object->getCreatedAtColumn()] = $timestamp;
return $data;
}, $insertData);
$object->insert($insertData);
答案 2 :(得分:0)
您需要使用Laravel Eloquent
功能将时间戳自动写入数据库,直接插入数据时,Laravel
不知道您的时间戳。您需要在插入语句中手动设置时间戳。
使用雄辩的模型,如下所示:-
foreach($insertData as $data) {
ProductCategory::create($data);
}