Я использую пакет Faker в своем сеялке, чтобы генерировать поддельные данные для учебных мероприятий.
Каждое событие имеет starts_at
а также ends_at
поля. Я хочу заселить ends_at
поле с DateTime
то есть после того, что сгенерировано для starts_at
предпочтительно от 1 до 8 часов или даже с фиксированной разницей в 1 час.
вот простой способ определить окончание
$starts_at = Carbon::createFromTimestamp($faker->dateTimeBetween($startDate = '+2 days', $endDate = '+1 week')->getTimeStamp()) ;
$ends_at= Carbon::createFromFormat('Y-m-d H:i:s', $starts_at)->addHours( $faker->numberBetween( 1, 8 ) );
Адаптация шаблона, описанного в Создавайте API, которые вы не будете ненавидеть и используя удивительный углерод пакет, вот как вы можете это сделать:
<?php
use Carbon\Carbon;
use Faker\Factory as Faker;
class UserEventsTableSeeder extends Seeder {
public function run() {
$faker = Faker::create();
foreach (range(1, 15) as $index) {
$startDate = Carbon::createFromTimeStamp($faker->dateTimeBetween('-1 years', '+1 month')->getTimestamp());
UserEvent::create([
// ...
'starts_at' => $startDate->toDateTimeString(),
'ends_at' => $startDate->addHours( $faker->numberBetween( 1, 8 ) )
]);
}
}
}