Проблема заполнения случайной даты сеялкой Laravel 6

#php #laravel

Вопрос:

Я заполняю базу данных сеялками и фабриками, проблема в том, что мне нужно заполнить поле CREATED_AT датами, которые являются не сегодняшней датой, а случайными, чтобы иметь возможность заполнять различные графики, которые есть на странице.

Я пробовал, и иногда он вставляет данные, а иногда выдает ошибку, что поле недопустимо, и это в формате даты ошибка, которая выбрасывает меня в консоль.

 ERROR MESSAGE
"Incorrect datetime value: '2021-09-05 00:00:00' for column 'created_at' at row 1"
 

Изображение ошибки

код

 $factory->define(Opportunity::class, function (Faker $faker) {
    $account_id = Account::all()->random()->id;
    $account    = Account::find($account_id);
    $contact    = Contact::where('account_id',$account_id)->inRandomOrder()->limit(1)->first();
    $created    = $this->faker->dateTimeBetween($startDate = '-3 month', $endDate = 'now  6 month');
    $date = strtotime(' 2 days', strtotime(Carbon::parse($created)));

    return [
        'created_at'    => Carbon::parse($created)->format('Y-m-d H:i:s'), ///line error
        'name'          => $this->faker->name .' '.$this->faker->sentence(2),
        'amount'        => $this->faker->numberBetween($min = 120000, $max = 20000000),
        'probability'   => $faker->randomElement(['0','10','20','30','40','50','60','70','80','90','100']),
        'description'   => $this->faker->paragraph,
        'lead_source_id'=> LeadSource::all()->random()->id,
        'sales_stage_id'=> 1,
        'account_id'    => $account_id,
        'user_id'       => $account->user_id,
        'contact_id'    => ( $contact != null ? $contact->id : null),
        'close_date'    => Carbon::parse($date)->format('Y-m-d'),
        'product_line_id'=> ProductLine::all()->random()->id
    ];
});
 

Комментарии:

1. какую версию laravel r вы используете?

2. @Pradeep Laravel 6

3. попробуйте, изменив $this->faker на $faker

4. Я не понимаю, почему это бесит, потому что всегда выдает мне ошибку с датой 2021-09-05 00:29:22

Ответ №1:

Попробуйте изменить $this->faker $faker , и миграция должна иметь $table->timestamps();

тогда вы можете использовать dateTimeBetween непосредственно так

 'created_at'=>$faker->dateTimeBetween($startDate = '-3 month',$endDate = 'now  6 month')
 

Класс сеялки возможностей

 public function run()
{
    factory(AppOpportunity::class,5)->create();
}
 

Класс DatabaseSeeder

   $this->call([
        OpportunitySeeder::class
  ]);
 

https://laravel.com/docs/6.x/database-testing#using-seeds

Комментарии:

1. счастливого кодирования! если возможно, пожалуйста, озвучьте ответы также спасибо