簡體   English   中英

使用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();

        ...
    }

我不確定你能不能嵌入那些工廠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM