如何调整Sequence(Laravel 8)中创建的对象数量
P粉043566314
P粉043566314 2023-09-04 10:08:32
[PHP讨论组]
<p>我正在尝试使用Seeder和Factory创建30条新闻。但我需要创建10条具有非空字段值<code>published_at</code>(Carbon)的新闻,而其他新闻则具有随机值(Carbon/NULL)。</p> <p>在文档中,我看到了这样一个例子,它创建了5条记录,值为<code>admin (Y)</code>,以及另外5条记录,值为<code>admin (N)</code>。</p> <pre class="brush:php;toolbar:false;">User::factory() -&gt;count(10) -&gt;state(new Sequence( ['admin' =&gt; 'Y'], ['admin' =&gt; 'N'], )) -&gt;create();</pre> <p>到目前为止,我使用了这段代码,但我无法弄清楚如何添加具有特定参数值<code>published_at</code>的记录数量。例如,10条使用Carbon,20条使用NULL。</p> <pre class="brush:php;toolbar:false;">/** ArticleSeeder */ Article::factory() -&gt;count(30) -&gt;state(new Sequence([ 'published_at' =&gt; Factory::create()-&gt;dateTimeBetween( now()-&gt;startOfMonth(), now()-&gt;endOfMonth() ), ])) -&gt;create();</pre></p>
P粉043566314
P粉043566314

全部回复(1)
P粉957723124

在序列闭包中,您可以访问$index属性,该属性包含迄今为止通过序列进行的迭代次数。

以下是您可以使用的最简单的逻辑来实现您想要的结果。

Article::factory()
->count(30)
->sequence(fn ($sequence) => [
    'published_at' => $sequence->index < 10
                      ?  Factory::create()->dateTimeBetween(
                             now()->startOfMonth(),
                             now()->endOfMonth()
                         );
                      : null
])
->create();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号