Php laravel种子唯一列忽略重复条目
我在拉维尔有一台播种机Php laravel种子唯一列忽略重复条目,php,laravel,laravel-5,Php,Laravel,Laravel 5,我在拉维尔有一台播种机 public function run() { $user = App\Admin::create([ 'first_name' => 'first', 'last_name' => 'last', 'phone' => '', 'email' => 'mail@gmail.com',
public function run()
{
$user = App\Admin::create([
'first_name' => 'first',
'last_name' => 'last',
'phone' => '',
'email' => 'mail@gmail.com',
]);
}
在这封邮件中是独一无二的
php artisan db:seed
当我第一次运行时,它会将记录输入数据库,当我再次运行时,它会显示重复的条目
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'mail@gmail.com' for key 'email'
我可以选择忽略它吗?您可以通过两种方式解决它: 1) 从数据库中的电子邮件列中删除唯一键约束(不推荐)
2) 使用faker library生成唯一的电子邮件地址-您可以通过两种方法解决此问题: 1) 从数据库中的电子邮件列中删除唯一键约束(不推荐)
2) 使用faker library生成唯一的电子邮件地址-在每次运行之前尝试刷新数据库。导入时使用: 使用Lightning\Foundation\Testing\RefreshDatabase …并把它放在你班上的第一位: 使用数据库
(From:)在每次运行之前尝试刷新数据库。导入时使用: 使用Lightning\Foundation\Testing\RefreshDatabase …并把它放在你班上的第一位: 使用数据库
(From:)填充数据库的简单方法是创建一个工厂,然后使用该工厂运行播种机 创建工厂,通常在data/Factorys目录中:
$factory->define(App\Admin::class, function (Faker\Generator $faker) {
return [
'first_name' => $faker->firstName,
'last_name' => $faker->lastName,
'phone' => $faker->phoneNumber,
'email' => $faker->email
];
});
然后运行您的播种机:
factory(Admin::class, 20)->create();
本例将创建20个用户并存储它们
上面的示例使用Faker生成随机数据,填充数据库的简单方法是创建一个工厂,然后使用该工厂运行seeder 创建工厂,通常在data/Factorys目录中:
$factory->define(App\Admin::class, function (Faker\Generator $faker) {
return [
'first_name' => $faker->firstName,
'last_name' => $faker->lastName,
'phone' => $faker->phoneNumber,
'email' => $faker->email
];
});
然后运行您的播种机:
factory(Admin::class, 20)->create();
本例将创建20个用户并存储它们
上面的示例使用Faker生成随机数据,我们可以选择检查表中是否存在给定的电子邮件
public function run(){
$admin = DB::table('admins')->where('email', '=', 'mail@gmail.com')->first();
if ($admin === null) {
// user doesn't exist
$user = App\Admin::create([
'first_name' => 'Walter',
'last_name' => 'Brown',
'phone' => '',
'email' => 'admin@gmail.com',
'password' => Hash::make('Admin123'),
'is_active' => 1,
'remember_token' => str_random(10)
]);
}
}
我们可以选择检查表中是否存在给定的电子邮件
public function run(){
$admin = DB::table('admins')->where('email', '=', 'mail@gmail.com')->first();
if ($admin === null) {
// user doesn't exist
$user = App\Admin::create([
'first_name' => 'Walter',
'last_name' => 'Brown',
'phone' => '',
'email' => 'admin@gmail.com',
'password' => Hash::make('Admin123'),
'is_active' => 1,
'remember_token' => str_random(10)
]);
}
}
您可以在模型上使用
firstOrCreate()
方法,如下所示:
public function run()
{
App\Admin::firstOrCreate([
'first_name' => 'first',
'last_name' => 'last',
'phone' => '',
'email' => 'mail@gmail.com',
]);
}
如果要插入多条记录,可以在run()
函数中执行以下操作:
$records = [
[
'first_name' => 'first',
'last_name' => 'last',
'phone' => '',
'email' => 'mail@gmail.com',
],
[
'first_name' => 'first2',
'last_name' => 'last2',
'phone' => '',
'email' => 'mail2@gmail.com',
]
];
foreach($records as $record) {
App\Admin::firstOrCreate($record);
}
我在我的播种器中使用这个技巧,只要我想确保没有重复的值插入到DB中。
firstOrCreate()
方法在创建记录之前检查该记录是否在数据库中。您可以在模型上使用firstOrCreate()
方法,如下所示:
public function run()
{
App\Admin::firstOrCreate([
'first_name' => 'first',
'last_name' => 'last',
'phone' => '',
'email' => 'mail@gmail.com',
]);
}
如果要插入多条记录,可以在run()
函数中执行以下操作:
$records = [
[
'first_name' => 'first',
'last_name' => 'last',
'phone' => '',
'email' => 'mail@gmail.com',
],
[
'first_name' => 'first2',
'last_name' => 'last2',
'phone' => '',
'email' => 'mail2@gmail.com',
]
];
foreach($records as $record) {
App\Admin::firstOrCreate($record);
}
我在我的播种器中使用这个技巧,只要我想确保没有重复的值插入到DB中。
firstOrCreate()
方法在创建记录之前检查该记录是否在数据库中,如果不在数据库中。您可能必须从数据库的电子邮件列中删除唯一键约束,您可以添加表admins
的迁移代码吗?要求是电子邮件应该是唯一的。
我要找的是覆盖或忽略。这是可能的。?您可能必须从数据库的电子邮件列中删除唯一键约束,是否可以添加表管理员的迁移代码?要求电子邮件应该是唯一的。
我要找的是覆盖或忽略。可能吗?facker是否会覆盖电子邮件或忽略电子邮件(如果已经存在)。?不,我在生产过程中遇到这个错误,我不想在那里插入假电子邮件,我正在寻找一个可以忽略电子邮件或覆盖电子邮件的解决方案。@Sethu还说facker的唯一生成器是(伪)随机的,他们有可能产生两次相同的值,尽管可能性不大。facker是否会覆盖电子邮件或忽略电子邮件(如果已经存在)。?不,我在生产过程中遇到了这个错误,我不想在那里插入假电子邮件,我正在寻找一种忽略电子邮件或覆盖电子邮件的解决方案。@Sethu还伪造了唯一的生成器(伪)随机的,他们有可能产生两次相同的值,虽然可能性不大。RefreshDatabase将删除所有条目。如果是这样,我们会丢失大量数据。我只希望种子播撒者忽略相同的记录是否已经存在。抱歉,没有意识到您正在播种一个填充了重要管理数据的表-很感兴趣在这种情况下,我同意所有建议伪造唯一地址的人,或者完全删除唯一约束的人。刷新数据库将删除所有条目。如果是这样的话,我们会丢失大量数据。我只希望种子播撒者忽略相同的记录。抱歉,没有意识到你是种子播撒者使用重要的管理数据填充一个表-这是一个有趣的情况。在这种情况下,我同意所有建议伪造唯一地址的人,或者完全删除唯一约束的人。如果你想提供一个可能的值数组(因为你需要它们,就像你的应用程序中的其他地方一样)还需要强制它们是唯一的吗?如果你想提供一系列可能的值(因为你需要它们,就像它们存在于你的应用程序中的其他地方一样),并且还需要强制它们是唯一的呢?