Laravel记录在调用工厂时被删除



>我有两个表 - 角色用户。在角色内部,我有一个记录。

{
  id: 1, name: Employee, timestamps: blahblah
}

奇怪的是,每当我调用我的用户工厂(它有一个用于字段role_id的外键)时,它都会删除角色表中的记录。它也不会创建工厂实例化,表示role_id外键约束失败。我不知道为什么会这样。

下面是用户工厂的代码。我已经硬编码了值,直到我弄清楚为止。

$factory->define(AppUser::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 约束冲突:1452 无法添加或更新子行:外部 键约束失败 ( app .users , 约束 users_role_id_foreign 外键(role_id)引用rolesid ))

任何帮助将不胜感激。

正如您的错误所说,您的外键验证似乎是问题所在。

给定的上下文中,您的role_id似乎是外键,您只是传递了一个您永远不会工作的任意值。

要解决此问题,您必须创建一个创建新角色的工厂方法并执行以下操作

$factory->define(AppUser::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:" />

最新更新