试图将变量从DatabaseSeeder传递到Laravel 8中的工厂;有新语法吗?

问题描述

试图将变量从DatabaseSeeder传递到Laravel 8中的工厂;有新语法吗? 我需要通过foreach遍历我的用户。我看到了很多将变量作为数组传递给工厂的示例

// DatabaseSeeder.PHP
foreach ($users as $user) {
$round = Round::factory()->create(['user' => $user,]);
}

我也看到了这个:

$round = Round::factory()->create($user);

这些例子大多数都已经有好几年了,但其中一个是19年9月。但是,这两种方法都不适合我。我得到:

// Terminal: PHP artisan db:seed
Illuminate\Foundation\Bootstrap\HandleExceptions::handleError("Undefined variable: user",…

我的foreach循环肯定会产生有效的$ user(通过dd($ user)确认)。我的工厂定义看起来像这样:

// RoundFactory.PHP
return [
    'user_id' => $user,'other_field' => $this->faker-> …something,other fields …
]

那么还有其他方法可以做到这一点吗?谢谢。

解决方法

我建议阅读Link 1Link 2。您可以创建UserFactory并实现definition方法,将HasFactory特征添加到模型中,然后运行它(x-您想要多少):

User::factory()->times(x)->make();

那只是做到这一点的一种选择。