繁体   English   中英

Laravel记录在调用Factory时被删除

[英]Laravel record being deleted when calling Factory

我有两个表-RolesUsers 在角色内部,我只有一条记录。

{
  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不能添加或更新子行,外键约束失败( appusers ,约束users_role_id_foreign外键( role_id )参考rolesid ))

任何帮助将不胜感激。

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

在给定的上下文中,您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM