【发布时间】:2014-12-29 07:04:42
【问题描述】:
我在我的 Seeder 中使用 Faker 包为训练事件生成假数据。
每个事件都有starts_at 和ends_at 字段。我想用 DateTime 填充 ends_at 字段,该字段位于为 starts_at 生成的字段之后,最好是 1 到 8 小时,甚至固定 1 小时的差异也可以。
【问题讨论】:
标签: php datetime laravel increment faker
我在我的 Seeder 中使用 Faker 包为训练事件生成假数据。
每个事件都有starts_at 和ends_at 字段。我想用 DateTime 填充 ends_at 字段,该字段位于为 starts_at 生成的字段之后,最好是 1 到 8 小时,甚至固定 1 小时的差异也可以。
【问题讨论】:
标签: php datetime laravel increment faker
这是定义ends_at的简单方法
$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 ) );
【讨论】:
调整Build APIs You Won't Hate 中描述的模式并使用很棒的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 ) )
]);
}
}
}
【讨论】:
DateTime::__construct() expects parameter 1 to be string, object given。这是完整的错误日志:laravel.io/bin/Jx34w 这是我的整个播种器文件:laravel.io/bin/QN9x4
starts_at 字段中插入0000-00-00 00:00:00。当我将'starts_at' => $startDate->timestamp, 更改为'starts_at' => $startDate, 时,starts_at 和ends_at 中都会出现相同的日期和时间。这是我的播种机:laravel.io/bin/Mk5KO