14

所以我有一个 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_at字段updated_at为空。我查看了预发货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_at这也导致updated_at字段为空,这很奇怪,因为当我在我的数据库中查看用户表时,他们拥有created_atupdated_at字段要在运行播种机的确切时间设置。

所以这是我的问题。为什么会这样?是否有必要使用:

'created_at' => date("Y-m-d H:i:s"),
'updated_at' => date("Y-m-d H:i:s"),

播种时获得填充时间戳?

4

2 回答 2

24

自动时间戳保存仅适用于 Eloquent 功能,因此您需要像下面这样手动执行非 eloquent 功能

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')

]);

或者雄辩地做(就像你在像 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 为日期时间和时间戳列提供了 Carbon。默认情况下,它将为 created_at、updated_at 和 deleted_at 列提供 Carbon。您可以在扩展 Eloquent\Model 的模型中自定义它。

Carbon\Carbon extends \DateTime,因此使用 Carbon 来支持 DateTime 不会损失功能,只会带来更多好处/灵活性。

于 2017-03-07T04:04:33.787 回答
2

在用户表播种器中为时间戳执行此操作。这个对我有用..

    use Carbon\Carbon;



    $faker = Factory::create();
    $date = Carbon::now()->modify('-2 year');
    $createdDate = clone($date);
    DB::table('users')->insert([

        [

            'name' => "XYZ",
            'slug' => "xyz",
            'email' => "xyz@test.com",
            'password' => bcrypt('secret'),
            'bio' => $faker->text(rand(250, 300)),
            'created_at' => $createdDate,
            'updated_at' => $createdDate

        ],
于 2019-05-16T12:57:04.417 回答