Laravel 播种结果为空时间戳
Laravel seeding results in Null timestamp
所以我有一个语言播种机 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
字段在数据库中为 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_at
和 updated_at
字段为空,这很奇怪,因为当我在我的数据库中查看用户 Table 时,他们有 created_at
和 updated_at
字段设置在 运行 播种者的确切时间。
所以这是我的问题。为什么会这样?是否有必要使用:
'created_at' => date("Y-m-d H:i:s"),
'updated_at' => date("Y-m-d H:i:s"),
播种时获取填充的时间戳?
Auto timestamp saving is only for Eloquent feature so you need to do manually like below for non eloquent feature
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 并没有失去功能,只是更多 benefit/flexibility.
在用户 table 播种器中为时间戳执行此操作。它对我有用..
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
],
所以我有一个语言播种机 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
字段在数据库中为 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_at
和 updated_at
字段为空,这很奇怪,因为当我在我的数据库中查看用户 Table 时,他们有 created_at
和 updated_at
字段设置在 运行 播种者的确切时间。
所以这是我的问题。为什么会这样?是否有必要使用:
'created_at' => date("Y-m-d H:i:s"),
'updated_at' => date("Y-m-d H:i:s"),
播种时获取填充的时间戳?
Auto timestamp saving is only for Eloquent feature so you need to do manually like below for non eloquent feature
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 并没有失去功能,只是更多 benefit/flexibility.
在用户 table 播种器中为时间戳执行此操作。它对我有用..
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
],