使用model :: insert()时,created_at和updated_at在laravel 5.6中无法自动工作。为什么?

时间:2018-08-14 03:17:10

标签: php laravel-5 eloquent

ProductCategory::insert($insertData);

我正在使用以上语句,通过一个数组来插入多个记录$insertData可以正常工作,但是当检查我的created_atupdated_at列时却没有时间戳。

3 个答案:

答案 0 :(得分:2)

您必须使用create()(记住要设置$fillable):

foreach($insertData as $data) {
    ProductCategory::create($data);
}

答案 1 :(得分:0)

insert()方法是QueryBuilder的直接SQL语句。它将您的值数组转换为查询语句,以插入而无需使用变异符或其他魔术。

您可以做一些事情来设置这些值。您可以使用ProductCategory::create($array);为每行数据循环执行一次插入操作。每次插入都会查询。

或者您可以将created_atupdated_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);
}

Eloquent ORM