Laravel 播种机 Eloquent 给时间戳 null

Laravel seeder with Eloquent give timestamp null

我正在尝试插入静态数据,借助播种机和 Eloquent 如下所示。

use Illuminate\Database\Seeder;
use App\Role;

class RoleSeeder extends Seeder
{
    public function run()
    {
        Role::insert(array(
            array('name' => 'admin'),
            array('name' => 'user')
        ));
    }
}

即使在使用 Eloquent 之后,我在数据库中得到的时间戳为空。

试试这个

<?php

use Illuminate\Database\Seeder;
use App\Role;
class RoleSeeder extends Seeder
{
    public function run()
    {
        Role::truncate();
        Role::create(['name' => 'admin']);
        Role::create(['name' => 'user']);
    }
}

产生错误是因为您使用的是插入而不是创建。

timestamp 列(created_atupdated_at)只会自动分配如果您使用 Eloquent
save()方法和create方法是Eloquent.
虽然 insert 方法是 而不是 Eloquent,但它是一个查询生成器方法。因此,请改用 create 方法:

public function run()
    {
        Role::create(array(
            array('name' => 'admin'),
            array('name' => 'user')
        ));
    }

当您使用查询生成器时,您必须自己 created_atupdated_at 值 :

Role::insert(array(
  array('name' => 'admin'),
  array('name' => 'user'),
  array('created_at' => \Carbon\Carbon::now()),
  array('updated_at' => \Carbon\Carbon::now()),
));