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) {
        //
    });
}