使用Laravel模型工厂创建关系

时间:2016-11-08 09:14:01

标签: php laravel-5 phpunit

我正在尝试使用模型工厂创建用户,但我的关系出错了。在User模型中,我为模型belongsTo创建了levels关系JobLevel。在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))

1 个答案:

答案 0 :(得分:0)

出于测试目的,您可以试试这个吗?

nfc.showSettings

我不确定你是否可以嵌入这些工厂。