Php Laravel 8:如何从数据库插入唯一数据
我需要使用Laravel 8在数据库中插入一些独特的内容。这是我的密码:Php Laravel 8:如何从数据库插入唯一数据,php,laravel,laravel-8,Php,Laravel,Laravel 8,我需要使用Laravel 8在数据库中插入一些独特的内容。这是我的密码: foreach($trigger as $e) { if(is_array($e)) { foreach($e as $t) $query = DB::table('tickets')->insert([ 'userId' => '', 'types' => '', 'startRoun
foreach($trigger as $e)
{
if(is_array($e))
{
foreach($e as $t)
$query = DB::table('tickets')->insert([
'userId' => '',
'types' => '',
'startRound' => '',
'endRound' => '',
'numbers' => '0x'.$t->toHex() // MUST BE UNIQUE
]);
}
}
正如您所看到的,numbers
字段应该存储唯一的数字,但我有一些重复的Hex
值,我不想将它们存储在数据库中
那么,如何将唯一值插入数据库中呢
请注意,我已经向迁移添加了unique(),如下所示:
$table->string('numbers')->unique()代码>
但这并不能解决我的问题,我需要向控制器添加一些代码,以使该字段唯一
所以我非常感谢你们的任何想法或解决方案
提前谢谢
更新#1:
更新#2:
更新#3:
首先,您需要获取现有数据的详细信息,然后在插入之前,您需要检查数据是否已存在,然后再插入
$existing_data = DB::table('tickets')->pluck('numbers', 'numbers');
foreach($trigger as $e)
{
if(is_array($e))
{
foreach($e as $t) {
if(!isset($existing_data['0x'.$t->toHex()])) {
$query = DB::table('tickets')->insert([
'userId' => '',
'types' => '',
'startRound' => '',
'endRound' => '',
'numbers' => '0x'.$t->toHex() // MUST BE UNIQUE
]);
$existing_data['0x'.$t->toHex()] = '0x'.$t->toHex();
}
}
}
}
要减少$existing_data
中的行数,您可以通过一些内置函数获取$t
中的所有值,然后像下面这样将它们传递给查询,从而传递给$trigger
$existing_data = DB::table('tickets')->whereIn('numbers', $all_values_of_t)->pluck('numbers', 'numbers');
如果您只想跳过插入,可以使用Laravel验证器中可用的规则
foreach($trigger as $e) {
if(is_array($e)) {
foreach($e as $t) {
$validator = Validator::make(['number' => '0x'.$t->toHex()], [
'numbers' => ['unique:tickets'],
]);
if ($validator->fails()) {
continue;
}
$query = DB::table('tickets')->insert([
'userId' => '',
'types' => '',
'startRound' => '',
'endRound' => '',
'numbers' => '0x'.$t->toHex() // MUST BE UNIQUE
]);
}
}
}
您应该在迁移或mysql中使用唯一的方法
$table->string('field_name')->unique();
这将避免重复记录如果值重复,您需要更新行还是根本不插入?@MehravishTemkar我只需要插入一个值不唯一时您希望发生什么?您希望自动生成一个唯一的值,还是只返回一个错误响应或某种排序?@Peppermintology现在我有一些随机值,但其中一些值是重复的,我不希望它们插入,但是如果数字值是重复的,并且没有插入,您希望发生什么。您想跳过该插入,还是想自动创建一个新的编号
并将其插入?谢谢您的回答,但我已对此进行了测试,仍将添加重复的数据。我刚刚添加了一个更新#1,你可以看到重复的数据插入!在$existing_data=DB::table('tickets')->puck('numbers')之后尝试dd($existing_data);并检查键是否是数字列的值,基本上,您只需要使用数字列索引数据PLZ是否签出更新3请更新此代码$existing_data=DB::table('tickets')->pull('numbers','numbers');我得到传递给Illumination\Validation\Factory::make()的参数2必须是数组类型,字符串给定,称为
error@KKKKKK抱歉,在make
方法的第二个参数中遗漏了一些[]
括号。更新了我的答案。我对此进行了测试,并将重复的数据添加到数据库中。见更新#2plz@KKKKKK早上不好。我的参数设置错误。@MehravishTemkar同意,您的解决方案将在更小的数据集上更有效。向下至OP以配置选项。:)他已经在迁移中添加了它