【问题标题】:How to reseed db without duplication - Laravel如何在不重复的情况下重新播种数据库 - Laravel
【发布时间】:2017-08-20 22:21:04
【问题描述】:

我的 laravel 5.2 应用中有这个播种器类:

class UserTypesTableSeeder extends Seeder
{

    public function run()
{

    DB::table('user_types')->insert([
[
    'type' => 'patient',
    'created_at' => Carbon::now(),
    'updated_at' => Carbon::now(),
],
[
    'type' => 'doctor',
    'created_at' => Carbon::now(),
    'updated_at' => Carbon::now(),
]

]);

    }
}

现在,我想在同一个播种器类中添加另一条记录。我尝试使用 firstOrCreate() :

UserType::firstOrCreate([
        'type' => 'patient',
        'created_at' => Carbon::now(),
        'updated_at' => Carbon::now(),
    ]);
    UserType::firstOrCreate([
        'type' => 'doctor',
        'created_at' => Carbon::now(),
        'updated_at' => Carbon::now(),
    ]);
    UserType::firstOrCreate([
        'type' => 'admin',
        'created_at' => Carbon::now(),
        'updated_at' => Carbon::now(),
    ]);

但它产生了重复的记录,updateOrCreate() 也是如此。

那么,如何在不重复记录的情况下将新记录添加到同一个播种器类??

【问题讨论】:

  • 重置表然后播种?
  • 无法从表中删除记录,因为它们是其他表中的外键。 @HorusKol

标签: database laravel eloquent laravel-seeding


【解决方案1】:

我认为firstOrCreate 方法没有按预期工作,因为上一条记录的时间与新查询的时间不同。因此,如果您从查询中删除 created_atupdated_at,如下所示:

UserType::firstOrCreate([ 'type' => 'patient' ]);

现在,它应该可以工作了。此外,created_atupdated_at 将自动由firstOrCreate 方法管理。

【讨论】:

  • 是的,在删除 created_at 和 updated_at 后它正在工作。非常感谢。
猜你喜欢
  • 2018-08-23
  • 2012-10-23
  • 2012-03-31
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
相关资源
最近更新 更多