php - 在使用 laravel 插入数据之前检查数据库并避免重复
问题描述
我试图在插入数据之前检查数据库以避免重复。我将 URL 存储在数组中,并将这些 URL 插入到表的“链接”列中。所以首先我要检查列,是否存在相同的 URL?如果没有,则使用此代码插入数据。
这是我插入数据库的全部代码;
foreach ($outlineUrls as $outlineUrl) {
$html = file_get_contents($outlineUrl);
$DOMParser = new \DOMDocument();
$DOMParser->loadHTML($html);
$changeForMyDB = [
'remote_id' => '',
'region' => '関西',
'link' => json_encode($outlineUrl),
'name' => '',
'price' => '',
'extend' => '',
'address' => '',
'hows_old' => '',
'rooms' => '',
'old' => '',
'entery' => '',
'balcon_m2' => '',
'company_name' => '',
'script_from' => ''
];
$allPTags = $DOMParser->getElementsByTagName('p');
foreach($allPTags as $ptag){
if($ptag->getAttribute('class') == 'c-name'){
$changeForMyDB['name'] = trim($ptag->nodeValue);
}
}
$changeForMyDB['address'] = trim($DOMParser->getElementsByTagName('dd')[0]->nodeValue);
$allTables = $DOMParser->getElementsByTagName('table');
foreach($allTables as $table){
foreach($table->getElementsByTagName('tr') as $tr){
$property = trim($tr->getElementsByTagName('th')[0]->nodeValue);
$value = trim($tr->getElementsByTagName('td')[0]->nodeValue);
switch ($property) {
case '物件名':
$changeForMyDB['name'] = $value;
break;
case '販売価格':
$changeForMyDB['price'] = $value;
break;
case '専有面積':
$changeForMyDB['extend'] = $value;
break;
case '所在地':
$changeForMyDB['address'] = $value;
break;
case '総戸数':
$changeForMyDB['hows_old'] = $value;
break;
case '間取り':
$changeForMyDB['rooms'] = $value;
break;
case '竣工時期':
$changeForMyDB['old'] = $value;
break;
case '管理会社':
$changeForMyDB['company_name'] = $value;
break;
case '入居時期':
$changeForMyDB['entery'] = $value;
break;
case '入居時期':
$changeForMyDB['entery'] = $value;
break;
case 'バルコニー面積':
$changeForMyDB['balcon_m2'] = $value;
break;
default:
# code...
break;
}
}
}
if(Estates::where('link','=',$outlineUrl)->count() > 0)
{
$this->error('There is link.');
} else {
Estates::insertGetId($changeForMyDB);
$this->line('Data saved.');
}
但问题就在这里。它在不检查的情况下插入数据!知道有什么问题吗?谢谢您的帮助。
解决方案
公共功能规则(){
return [
'tool_id' => ['required','integer','unique:assign_toolto_joborders'],
'joborder_id' => ['required','integer'],
'assign_date' => ['required','date_format:d-m-Y'],
'tool_qty' => ['required','integer']
];
}
使用这些规则
$request->validate($this->rules());
推荐阅读
- node.js - Angular 源文件在浏览器中可见。如何隐藏?
- javascript - Slick Carousel - 在移动设备上幻灯片中的 5 个项目到 1 个项目
- python-3.x - 尝试获取占位符详细信息时如何访问幻灯片的形状元素?这是使用 Python PPTX 完成的
- javascript - 在 v-for 循环中访问元素的数据 (Vue.js)
- php - 为什么 Laravel 提供默认时间戳?
- django - Django Formset Validation - Formset 中的总和值
- r - 如何在 r 中创建一个新的键值对
- java - 为什么jar的父文件夹也出现在引用的库中?
- c# - c# 使用 ConsoleColor 作为 int
- bash - 如何在双引号内转义双引号内的双引号?