如何在Laravel 5.3中播种日期字段?

时间:2017-01-23 13:45:32

标签: php laravel laravel-5.3

我设法为发布时需要在数据库中的数据设置了相当数量的种子。一切都很简单并且运行良好,直到我需要使用默认日期为DATE字段播种。

我已尝试过以下内容......

DatabaseSeeder.php

class SettingsTableSeeder extends Seeder {
    public function run()
    {
        Setting::create([
            'name' => 'Start Date',
            'date' => '2000-01-01'
        ]);
    }
}

在我的模型中,我被告知要添加修复它,但它没有。

Setting.php

protected $dates = [
    'created_at',
    'updated_at',
    'date'
];

每次我去运行播种机时都会抛出错误:

[InvalidArgumentException]
The separation symbol could not be found
Unexpected data found.
Trailing data

如果我删除了更改日期的引号..

[InvalidArgumentException]
The separation symbol could not be found
Data missing

知道如何为DATE数据库字段播种默认值吗?

3 个答案:

答案 0 :(得分:6)

如果date$dates数组中,请插入Carbon实例而不是字符串:

Setting::create([
    'name' => 'Start Date',
    'date' => Carbon::parse('2000-01-01')
]);

您需要确保Carbon可以在文件顶部使用:

use Carbon\Carbon;

它由Laravel / Composer自动加载。

答案 1 :(得分:1)

只需尝试使用date插入Carbon

class SettingsTableSeeder extends Seeder {
   public function run(){
      Setting::create([
        'name' => 'Start Date',
        'date' => \Carbon\Carbon::createFromDate(2000,01,01)->toDateTimeString()
      ]);
   }
}

答案 2 :(得分:0)

Alexey Mezenin和Jaymin Panchal给出的答案仍然导致拖尾数据错误。

最终为我工作的是包括......

use Carbon\Carbon;

位于DatabaseSeeder.php文件的顶部。

然后将我的Setting :: create更改为...

DB::table('settings')->insert([
    'name' => 'Start Date',
    'date' => Carbon::create('2000', '01', '01')
]);

出于某种原因,我不能在播种时使用标准的Model :: create方法使用Carbon,但它适用于DB :: table(' table') - > insert。