我正在尝试使用Seeder和Factory创建30条新闻。但我需要创建10条具有非空字段值published_at(Carbon)的新闻,而其他新闻则具有随机值(Carbon/NULL)。
在文档中,我看到了这样一个例子,它创建了5条记录,值为admin (Y),以及另外5条记录,值为admin (N)。
User::factory()
->count(10)
->state(new Sequence(
['admin' => 'Y'],
['admin' => 'N'],
))
->create();
到目前为止,我使用了这段代码,但我无法弄清楚如何添加具有特定参数值published_at的记录数量。例如,10条使用Carbon,20条使用NULL。
/** ArticleSeeder */
Article::factory()
->count(30)
->state(new Sequence([
'published_at' => Factory::create()->dateTimeBetween(
now()->startOfMonth(),
now()->endOfMonth()
),
]))
->create(); Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
在序列闭包中,您可以访问$index属性,该属性包含迄今为止通过序列进行的迭代次数。
以下是您可以使用的最简单的逻辑来实现您想要的结果。
Article::factory() ->count(30) ->sequence(fn ($sequence) => [ 'published_at' => $sequence->index < 10 ? Factory::create()->dateTimeBetween( now()->startOfMonth(), now()->endOfMonth() ); : null ]) ->create();