Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Don';如果行已存在于数据库中,则不导入该行_Php_Laravel - Fatal编程技术网

Php Don';如果行已存在于数据库中,则不导入该行

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

我想用Laravel 5.7将项目从我的CSV文件导入MSSQL数据库。在我的CSV文件中,第一列是item_id,第二列是description。 现在如何设置为不下载数据库中已有ID的项目? 项目控制器:

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)吗?