我有两个表-角色和用户。在角色内部,我只有一条记录。
{
id: 1, name: Employee, timestamps: blahblah
}
奇怪的是,每当我调用用户工厂(该工厂具有角色role_id的外键)时,它都会删除“角色”表中的记录。它还使工厂实例化失败,表明 role_id外键约束失败。我不知道为什么会这样。
这是用户工厂的代码。我已经对值进行了硬编码,直到我能弄清楚为止。
$factory->define(App\User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => Hash::make("12341234"),
'remember_token' => str_random(10),
'company_id' => 1,
'role_id' => 1,
];
});
错误:
Doctrine \ DBAL \ Driver \ PDOException:SQLSTATE [23000]:完整性 约束违反:1452无法添加或更新子行:外部 键约束失败(
app
。users
,约束users_role_id_foreign
外键(role_id
)参考roles
(id
)
任何帮助将不胜感激。
答案 0 :(得分:2)
您的外键验证似乎是您所说的错误所在。
在给定的上下文中,您的role_id似乎是外键,并且您只是传递了一个永远不会起作用的任意值。
要解决此问题,您将必须创建一个工厂方法来创建新角色并执行以下操作
$factory->define(App\User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => Hash::make("12341234"),
'remember_token' => str_random(10),
'company_id' => 1,
'role_id' => factory(Role::class)->create()->id,
];
});
PS确保您的大量任务包括role_id
答案 1 :(得分:0)
虽然我无法弄清与此相关的确切怪异之处,但我相信它与PHPUnit的数据库配置有关。我在phpunit.xml中添加了以下几行来解决该问题。
还值得一提的是,由于测试使用的是 RefreshDatabase ,因此删除了角色实体。
<env name="DB_CONNECTION" value="sqlite" />
<env name="DB_DATABASE" value=":memory:" />