所以我有一个Languages Table(LanguageTableSeeder)的播种器,如下所示:

DB::table('languages')->insert([
    'name'        => 'English',
    'flag'        => '',
    'abbr'        => 'en',
    'script'    => 'Latn',
    'native'    => 'English',
    'active'    => '1',
    'default'    => '1',
]);

    $this->command->info('Language seeding successful.');

但这导致created_atupdated_at字段在数据库中为Null。我查找了预装的UsersTabeSeeder并将其LanguageTableSeeder更改为完全相同的格式:
DB::table('languages')->delete();

$languages = [
    [
        'name' => 'English',
        'flag' => '',
        'abbr' => 'en',
        'script' => 'Latn',
        'native' => 'English',
        'active' => '1',
        'default' => '1',
    ],
];

foreach ($languages as $language){
    Language::create($language);
}

这也导致created_atupdated_at字段为Null,这很奇怪,因为当我查询数据库中的Users Table时,他们在运行种子机的确切时间设置了created_atupdated_at字段。

所以这是我的问题。为什么会这样呢?并且有必要使用:
'created_at' => date("Y-m-d H:i:s"),
'updated_at' => date("Y-m-d H:i:s"),

播种时获得时间戳记?

最佳答案


DB::table('languages')->insert([
    'name'        => 'English',
    'flag'        => '',
    'abbr'        => 'en',
    'script'    => 'Latn',
    'native'    => 'English',
    'active'    => '1',
    'default'    => '1',
    'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
    'updated_at' => Carbon::now()->format('Y-m-d H:i:s')

]);

或者 Eloquent 地做到这一点(就像您在自动生成的种子(如UserTableSeeder中所见)一样)
    $language = new Language();
    $language ->name = 'English';
    $language->flag'  = '',
    $language ->abbr  = 'en',
    $language->script ='Latn',
    $language->native ='English',
    $language->active ='1',
    $language->default ='1',
    $language->save();

为什么要使用碳?
Eloquent为datetime和timestamp列提供Carbon。默认情况下,它将为created_at,updated_at和Deleted_at列提供Carbon。您可以在扩展Eloquent\Model的模型中对此进行自定义。
Carbon\Carbon extends \DateTime,因此使用Carbon代替DateTime不会造成功能损失,只会带来更多好处/灵活性。

关于Laravel播种会导致Null时间戳记,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42639976/

10-16 06:56