使用Laravel模型工厂创建关系


Creating relations using Laravel model factories

我试图使用模型工厂创建用户,但我有一个错误的关系。在User模型中,我为模型JobLevel创建了一个belongsTo关系levels。在ModelFactory.php中,我有以下代码:

    use App'User;
use App'JobLevel;
$factory->define(JobLevel::class, function (Faker'Generator $faker) {
    return [
        'name' => $faker->word,
        'rank' => $faker->randomDigit,
    ];
});
$factory->define(User::class, function (Faker'Generator $faker) {
    return [
        'firstname' => $faker->name,
        'middlename' => $faker->name,
        'lastname' => $faker->name,
        'email' => $faker->email,
        'job_level_id' => factory(JobLevel::class)->create()->id,
        'password' => bcrypt(str_random(10)),
        'remember_token' => str_random(10),
    ];
});

然后我在我的测试类,我使用工厂如下。

   /** @test */
        public function login_a_user()
        {
            $user = factory(User::class)->create();
            ...
        }

当我运行phpunit时,我得到以下错误

    Illuminate'Database'QueryException: SQLSTATE[23000]: Integrity 
    constraint violation: 1452 Cannot add or update a child row: a foreign key 
    constraint fails (`testing_db`.`user`, CONSTRAINT `fk_user_job_level1`
 FOREIGN KEY (`job_level_id`) REFERENCES `job_level` (`id`) ON DELETE NO 
ACTION ON UPDATE NO ACTION) (SQL: insert into `user` (`updated_at`, 
`created_at`) values (2016-11-08 12:01:14, 2016-11-08 12:01:14))

为了测试的目的,你能试试这个吗?

$factory->define(User::class, function (Faker'Generator $faker) {
    return [
        'firstname' => $faker->name,
        'middlename' => $faker->name,
        'lastname' => $faker->name,
        'email' => $faker->email,
        'job_level_id' => 1,
        'password' => bcrypt(str_random(10)),
        'remember_token' => str_random(10),
    ];
});
public function login_a_user()
    {
        $job = factory(JobLevel::class)->create();
        $user = factory(User::class)->create();
        ...
    }

我不确定你能否嵌入那些工厂