【问题标题】:Laravel, Faker - Increment generated dateTimeLaravel,Faker - 增量生成的日期时间
【发布时间】:2014-12-29 07:04:42
【问题描述】:

我在我的 Seeder 中使用 Faker 包为训练事件生成假数据。

每个事件都有starts_atends_at 字段。我想用 DateTime 填充 ends_at 字段,该字段位于为 starts_at 生成的字段之后,最好是 1 到 8 小时,甚至固定 1 小时的差异也可以。

【问题讨论】:

    标签: php datetime laravel increment faker


    【解决方案1】:

    这是定义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 ) );
    

    【讨论】:

    【解决方案2】:

    调整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 ) )
                ]);
            }
        }
    }
    

    【讨论】:

    • 实际上,Raphael_,当我运行你的代码时,我得到了这个错误: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' =&gt; $startDate-&gt;timestamp, 更改为'starts_at' =&gt; $startDate, 时,starts_atends_at 中都会出现相同的日期和时间。这是我的播种机:laravel.io/bin/Mk5KO
    • 我已经成功了 Raphael_。感谢您的大力帮助。这是我的代码:laravel.io/bin/Yydmy。我将编辑您的代码并接受您的回答。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2019-01-19
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多