[英]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.