Я использую пакет Faker в своем Seeder для создания поддельных данных для учебных мероприятий.
Каждое событие имеет starts_at
и ends_at
. Я хочу заполнить поле ends_at
с помощью DateTime
которое будет после того, как оно было сгенерировано для starts_at
, предпочтительно от 1 до 8 часов или даже с фиксированной разницей в 1 час.
вот простой способ определить end_at
$starts_at = Carbon::createFromTimestamp($faker->dateTimeBetween($startDate = '+2 days', $endDate = '+1 week')->getTimeStamp()) ; $ends_at= Carbon::createFromFormat('Ymd H:i:s', $starts_at)->addHours( $faker->numberBetween( 1, 8 ) );
Адаптируя шаблон, описанный в Build API, вы не будете ненавидеть и использовать потрясающий пакет Carbon , вот как вы можете это сделать:
<?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 ) ) ]); } } }