Laravel 8 在模型工厂中定义 belongsToMany 定义
Laravel 8 define belongsToMany definition in Model factory
我正在尝试创建一个 Request
工厂,它将为使用所述工厂创建的每个 Request
实例分配多个随机用户。
在工厂中使用方法 definition
我可以为 Media
分配 belongsTo
,但我不清楚如何创建 belongsToMany
users
.
这是我的 Request
型号:
class Request extends Model
{
use HasFactory;
public function media()
{
return $this->belongsTo('App\Media');
}
public function users()
{
return $this->belongsToMany('App\User');
}
}
这是我现在拥有的工厂:
class RequestFactory extends Factory
{
protected $model = Request::class;
public function definition()
{
return [
// This is the belongsToMany relationship (that doesn't work) defined as users() in the Request model.
'users' => function() {
return User::inRandomOrder()->random(random_int(1,5))->get()->pluck('id');
},
// This is the belongsTo relationship (that works)
'media_id' => function() {
return Media::inRandomOrder()->first()->id;
}
];
}
}
除了键 users
之外,我还尝试了 user_id
& User::class
希望 Laravel 会选择数组,并自动在关系中使用它,但不幸的是,这也不起作用,因为该列不存在。
我怎样才能在工厂内专门完成这项工作?
我想当你做一个 belongToMany 关系时,在 Request 和 User 之间还有另一个 table 可以称为 UserRequest,你不能像这样在 Factory 中指定它,但是你可以创建一个 after create 函数在第三个 table 中创建用户和请求之间的 link
您可以在此处的文档中看到它。
https://laravel.com/docs/8.x/database-testing#factory-callbacks
您可以在您的工厂中添加以下方法class:
public function configure()
{
return $this->afterMaking(function (Request $request) {
//
})->afterCreating(function (Request $request) {
//
});
}
我正在尝试创建一个 Request
工厂,它将为使用所述工厂创建的每个 Request
实例分配多个随机用户。
在工厂中使用方法 definition
我可以为 Media
分配 belongsTo
,但我不清楚如何创建 belongsToMany
users
.
这是我的 Request
型号:
class Request extends Model
{
use HasFactory;
public function media()
{
return $this->belongsTo('App\Media');
}
public function users()
{
return $this->belongsToMany('App\User');
}
}
这是我现在拥有的工厂:
class RequestFactory extends Factory
{
protected $model = Request::class;
public function definition()
{
return [
// This is the belongsToMany relationship (that doesn't work) defined as users() in the Request model.
'users' => function() {
return User::inRandomOrder()->random(random_int(1,5))->get()->pluck('id');
},
// This is the belongsTo relationship (that works)
'media_id' => function() {
return Media::inRandomOrder()->first()->id;
}
];
}
}
除了键 users
之外,我还尝试了 user_id
& User::class
希望 Laravel 会选择数组,并自动在关系中使用它,但不幸的是,这也不起作用,因为该列不存在。
我怎样才能在工厂内专门完成这项工作?
我想当你做一个 belongToMany 关系时,在 Request 和 User 之间还有另一个 table 可以称为 UserRequest,你不能像这样在 Factory 中指定它,但是你可以创建一个 after create 函数在第三个 table 中创建用户和请求之间的 link 您可以在此处的文档中看到它。 https://laravel.com/docs/8.x/database-testing#factory-callbacks
您可以在您的工厂中添加以下方法class:
public function configure()
{
return $this->afterMaking(function (Request $request) {
//
})->afterCreating(function (Request $request) {
//
});
}