Php Don';如果行已存在于数据库中,则不导入该行
我想用Laravel 5.7将项目从我的CSV文件导入MSSQL数据库。在我的CSV文件中,第一列是item_id,第二列是description。 现在如何设置为不下载数据库中已有ID的项目? 项目控制器:Php Don';如果行已存在于数据库中,则不导入该行,php,laravel,Php,Laravel,我想用Laravel 5.7将项目从我的CSV文件导入MSSQL数据库。在我的CSV文件中,第一列是item_id,第二列是description。 现在如何设置为不下载数据库中已有ID的项目? 项目控制器: public function import(Item $item, Request $request) { if ($request->hasFile('itemsfile')) { if ($request->itemsfil
public function import(Item $item, Request $request)
{
if ($request->hasFile('itemsfile')) {
if ($request->itemsfile->getClientOriginalExtension() == 'csv')
{
$rowCount = 0;
$csvAsArray = array_map(function($v){return str_getcsv($v, ";");}, file($request->file('itemsfile')));
foreach($csvAsArray as $row)
{
if(count($row)>=2){
if(trim($row[0]) != '' && trim($row[1]) != '') {
$item= new Item();
$item->item_id= $row[0];
$item->description= $row[1];
$item->save();
$rowCount++;
}
} else {
}
}
return redirect()->route('admin.items');
}
else {
return back();
}
}
else {
return back();
}
}
项目请求:
public function rules()
{
return [
'item_id' => 'required|unique:items'
];
}
当我添加一个新项目(而不是导入它)时,唯一id号检查工作正常,但当我想从CSV文件导入包而不导入数据库中已有的行时,整个CSV将被导入。
谢谢你的帮助!
dd(csvas阵列)
阵列:30[▼ 0=>数组:2[▼
0=>“描述1”
1=>“123456789”]1=>数组:2[▶] . . . 等等
您需要检查该数据是否已在数据库中:
if(Item::where('item_id','=',$row[0])->count() == 0) {
$item= new Item();
$item->item_id= $row[0];
$item->description= $row[1];
$item->save();
$rowCount++;
}
此外,如果您有一个唯一的规则,那么您应该在迁移文件中执行相同的操作。
您可能会有这样的情况:
Schema::create('Item', function (Blueprint $table) {
$table->integer('item_id');
});
然后使用唯一规则创建一个新迁移
Schema::table('Item', function (Blueprint $table) {
$table->unique('item_id'); //add unique rule
});
你能在这里打印dd($csvAsArray)吗?