[英]Laravel record being deleted when calling Factory
我有两个表-Roles和Users 。 在角色内部,我只有一条记录。
{
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,
];
});
错误:
学说\\ DBAL \\驱动程序\\ PDOException:SQLSTATE [23000]:完整性约束违规:1452不能添加或更新子行,外键约束失败(
app
。users
,约束users_role_id_foreign
外键(role_id
)参考roles
(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' => factory(Role::class)->create()->id,
];
});
PS确保您的大量任务包括role_id
虽然我无法弄清与此相关的确切怪异之处,但我相信它与PHPUnit的数据库配置有关。 我在phpunit.xml中添加了以下几行,以解决该问题。
还值得一提的是,由于测试使用的是RefreshDatabase ,因此删除了角色实体。
<env name="DB_CONNECTION" value="sqlite" />
<env name="DB_DATABASE" value=":memory:" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.