我有一个 speciality 可以有很多 procedures

我想用许多程序来播种这两个专业。

型号:

专业

class Speciality extends Model
{

    protected $fillable = ['name'];

    public function procedures() {
        return $this->hasMany('App\Procedure');
    }
}

过程
class Procedure extends Model
{
    protected $fillable = ['speciality_id', 'name'];

    public function speciality() {
        return $this->belongsTo('App\Speciality');
    }
}

工厂:

专业
$factory->define(App\Speciality::class, function (Faker $faker) {
    return [
        'name' => 'Example'
    ];
});

过程
$factory->define(App\Procedure::class, function (Faker $faker) {
    return [
        'name' => $faker->realText(20)
    ];
});

播种:
public function run()
    {
        factory(App\Speciality::class)->create()
            ->each(function($speciality) {
                $speciality->procedures()
                    ->saveMany(factory(App\Procedure::class, rand(5,20))
                    ->make()
                );
        });
    }

显示的错误是:


speciality_id 未设置为 procedure 工厂中的值,因为它是专业的外键。但我对使用 $speciality->procedures() 的理解是它会在播种时自动分配 speciality_id。

请问为什么会出现这个错误。非常感谢。

最佳答案

我在这里可能是错的,但我认为当你调用 make 时只有一个小问题:

public function run()
    {
        factory(App\Speciality::class)->create()
            ->each(function($speciality) {
                $speciality->procedures()
                    ->saveMany(factory(App\Procedure::class, rand(5,20))->make());

        });
    }

之前从未将其与 saveMany() 一起使用,仅使用 save() ,但尝试一下?

10-08 05:22