上传到数据库时检查重复

时间:2018-05-18 05:31:12

标签: php laravel eloquent laravel-5.5 laravel-5.6

我需要在上传包含一些详细信息的Excel文件时在现有表格中找到重复的详细信息,我需要通过电话号码和客户名称查找。我正在使用mattexcel将数据上传到数据库中。

我不想插入那些细节,如果它在那里,但其他细节必须插入该表

控制器

public function importExcel(Request $request)
    {
        if ($request->hasFile('import_file')) {
            Excel::load($request->file('import_file')->getRealPath(), function ($reader) {
                foreach ($reader->toArray() as $key => $row) {
                    $data['customername'] = $row['customername'];
                    $data['chassis'] = $row['chassis'];
                    $data['model'] = $row['model'];
                    $data['branchcode'] = $row['branchcode'];
                    $data['delivery'] = $row['delivery'];
                    $data['customerid'] = $row['customerid'];
                    $data['phone'] = $row['phone'];
                    $data['invoicedate'] = $row['invoicedate'];
                    $data['dse'] = $row['dse'];
                    $data['branch'] = $row['branch'];
                    $data['finance'] = $row['finance'];
                    $data['dono'] = $row['dono'];
                    $data['invoice'] = $row['invoice'];
                    $data['zsm'] = $row['zsm'];
                    $data['sm'] = $row['sm'];
                    $data['agm'] = $row['agm'];
                    $data['dsecode'] = $row['dsecode'];
                    $data['address'] = $row['address'];
                    $data['email'] = $row['email'];
                    $data['color'] = $row['color'];
                    $data['extendedwarrenty'] = $row['extendedwarrenty'];
                    $data['autocaddownload'] = $row['autocaddownload'];
                    $data['numberplate'] = $row['numberplate'];
                    $data['mcpstatus'] = $row['mcpstatus'];
                    $data['plandt'] = $row['plandt'];
                    $data['planok'] = $row['planok'];
                    $data['fasttag'] = $row['fasttag'];
//                    $data['settilment_pdf_path'] = $row['settilment_pdf_path'];
                    $data['rcstatus'] = $row['rcstatus'];
                    $branch = Branch::where([['branch_code', $row['branchcode']], ['status', 0]])->first();
                    $registration_id = Registration::orderBy('registration_id', 'desc')->take(1)->get();

                    if (count($registration_id) > 0) {
                        $regid = $registration_id[0]->registration_id;
                        $regid = $regid + 1;

                    } else {
                        $regid = 1;
                    }

                    $register = new Registration();
                    $register->registration_id = $regid;
                    $register->customername = $row['customername'];
                    $register->chassis = $row['chassis'];
                    $register->model = $row['model'];
                    $register->branchcode = $row['branchcode'];
                    $register->delivery = $row['delivery'];
                    $register->customerid = $row['customerid'];
                    $register->phone = $row['phone'];
                    $register->invoicedate = $row['invoicedate'];
                    $register->dse = $row['dse'];
                    $register->branch = $row['branch'];
                    $register->finance = $row['finance'];
                    $register->dono = $row['dono'];
                    $register->invoice = $row['invoice'];
                    $register->zsm = $row['zsm'];
                    $register->sm = $row['sm'];
                    $register->agm = $row['agm'];
                    $register->dsecode = $row['dsecode'];
                    $register->address = $row['address'];
                    $register->email = $row['email'];
                    $register->color = $row['color'];
                    $register->extendedwarrenty = $row['extendedwarrenty'];
                    $register->autocaddownload = $row['autocaddownload'];
                    $register->numberplate = $row['numberplate'];
                    $register->mcpstatus = $row['mcpstatus'];
                    $register->plandt = $row['plandt'];
                    $register->planok = $row['planok'];
                    $register->fasttag = $row['fasttag'];
                    $register->rcstatus = $row['rcstatus'];
                    $register->dealership = $branch->dealership_id;
                    $register->zone = $branch->zone_id;
                    $register->dh = $branch->dh_id;
                    $register->status = '0';
                    $register->created_user_id = Session::get('created_id');
                    $register->save();
                    $regidn = Registration::orderBy('registration_id', 'desc')->get();
                    $regidd = $regidn[0]->registration_id;

                    $ssitrack = new Ssi_track();
                    $ssitrack->registration_id = $regid;
                    $ssitrack->ssi_track_id = $regid;
                    $ssitrack->save();
                    $ssitrackk = Ssi_track::orderBy('ssi_track_id', 'desc')->get();
                    $ssitrackk = $ssitrackk[0]->registration_id;


                }
            });

        }
        return back()->with('success', 'Your File Is Successfully Uploaded To Database!');
    }

1 个答案:

答案 0 :(得分:1)

选项1.您可以在迁移中添加唯一值组合。

Schema::table('your_table_name', function (Blueprint $table) {
            $table->unique(['phone ','customername ']);
});

这不会让您为这些列组合插入相同的组合值,但是它也会导致错误停止导入功能。

选项2(更好)。 检查值是否已经退出并忽略该列的导入。

$old_customer = Regiter::where('phone', $row['phone'])->where('customername', $customername )->first();
        //Inser only if customer not found
        if(is_null($old_customer)) 
        {
            //INSERT QUERY
        }

要减少查询次数,您可以使用单个查询来拨打姓名和电话,或使用任何其他优化技巧。