如何在不重复的情况下重新播种数据库 - Laravel
How to reseed db without duplication - Laravel
我的 laravel 5.2 应用程序中有这个播种机 class :
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(),
]
]);
}
}
现在,我想在同一个播种机中添加另一条记录 class。我尝试使用 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() 也是如此。
那么,如何在不重复记录的情况下将新记录添加到同一个播种机 class??
我认为 firstOrCreate
方法没有按预期工作,因为上一条记录的时间与新查询的时间不同。因此,如果您从查询中删除 created_at
和 updated_at
,如下所示:
UserType::firstOrCreate([ 'type' => 'patient' ]);
现在,应该可以了。此外,created_at
和 updated_at
将自动由 firstOrCreate
方法管理。
我的 laravel 5.2 应用程序中有这个播种机 class :
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(),
]
]);
}
}
现在,我想在同一个播种机中添加另一条记录 class。我尝试使用 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() 也是如此。
那么,如何在不重复记录的情况下将新记录添加到同一个播种机 class??
我认为 firstOrCreate
方法没有按预期工作,因为上一条记录的时间与新查询的时间不同。因此,如果您从查询中删除 created_at
和 updated_at
,如下所示:
UserType::firstOrCreate([ 'type' => 'patient' ]);
现在,应该可以了。此外,created_at
和 updated_at
将自动由 firstOrCreate
方法管理。