Laravel:CSV验证

时间:2018-08-13 13:15:46

标签: php laravel laravel-4 duplicates

在上传之前,如何验证csv文件中的字段。

我想在上传之前从csv文件中获取所有重复的电子邮件ID,这些ID在数据库中已经可用。

如果文件中存在重复文件,则上传其他文件(重复项除外),并在上传后显示所有重复的电子邮件ID

    public function store(Request $request)
{
    $upload = $request->file('upload-file');
    $getPath = $upload->getRealPath();

    $file = fopen($getPath,'r');        

    while($columns = fgetcsv($file))
    {
        if($columns[0]=="")
        continue;


        $data =  $columns;


        foreach($data as $key=>$value)
        {
            $name = $data[0];
            $email = $data[1];
            $password = $data[2];

        }

        try{
            $user = User::Create(
                [
                    'name'=>$name,
                    'email'=>$email,
                    'password'=>$password,
                ]);
            $user->save();
        }
        catch(Exception $e)
        {
          if($e->getCode() == 23000)
              return 'we have found duplicate records';
          else
              $e->getCode();
        };

    }

2 个答案:

答案 0 :(得分:0)

您可以做的是,创建任何私有,公共等数组变量(无论您想要什么),并将所有excel值推送到该变量,并使用php函数从该数组中找到唯一的结果集并将其存储到数据库中。

public $records = [];
public function store(Request $request)
{
    $upload = $request->file('upload-file');
    $getPath = $upload->getRealPath();

    $file = fopen($getPath,'r');        

    while($columns = fgetcsv($file))
    {
        if($columns[0]=="")
        continue;


        $data =  $columns;
        array_push($this->records, data);



    }
}

array_unique($this->records)//it will give you unique results set and insert bulk insert

答案 1 :(得分:0)

因此您可以这样做。

x <- c("xxxxxxx8", "1234567x", "ab12ef78", "x!3d5f78", "x23456789", "Ab123456")

grepl("^(?=.*[a-z])(?=.*\\d)[a-z\\d]{8}$", x, perl=TRUE)
# [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE