Laravel 调用工厂时记录被删除
Laravel record being deleted when calling Factory
我有两个 tables - 角色 和 用户。在角色内部,我有一条记录。
{
id: 1, name: Employee, timestamps: blahblah
}
奇怪的是,每当我调用我的用户工厂(它有字段 role_id 的外键)时,它都会删除角色 table 中的记录。它也无法创建工厂实例化,表示 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]: Integrity
constraint violation: 1452 Cannot add or update a child row: a foreign
key constraint fails (app
.users
, CONSTRAINT
users_role_id_foreign
FOREIGN KEY (role_id
) REFERENCES 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 中添加了以下几行,解决了这个问题。
还值得一提的是,role 实体已被删除,因为测试使用的是 RefreshDatabase。
<env name="DB_CONNECTION" value="sqlite" />
<env name="DB_DATABASE" value=":memory:" />
我有两个 tables - 角色 和 用户。在角色内部,我有一条记录。
{
id: 1, name: Employee, timestamps: blahblah
}
奇怪的是,每当我调用我的用户工厂(它有字段 role_id 的外键)时,它都会删除角色 table 中的记录。它也无法创建工厂实例化,表示 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]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
app
.users
, CONSTRAINTusers_role_id_foreign
FOREIGN KEY (role_id
) REFERENCESroles
(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 中添加了以下几行,解决了这个问题。
还值得一提的是,role 实体已被删除,因为测试使用的是 RefreshDatabase。
<env name="DB_CONNECTION" value="sqlite" />
<env name="DB_DATABASE" value=":memory:" />