在Laravel验证导入CSV

时间:2016-07-25 10:53:34

标签: validation laravel csv import

我想在laravel 5.2中使用matlab / Excel导入csv文件,

价格应该是整数,但是当有人输入价格作为字符串时,我需要验证它。

这是我的代码:

Excel::filter( 'chunk' )->load( $path . $filename )->chunk( 1000, function( $results ) {
    foreach ( $results as $import_data ) {
        $validation = Validator::make( $import_data->toArray(), [
            'code' => 'required|alpha',
            'name' => 'alpha',
            'number' => 'alpha',
            'price' => 'numeric',
            'pages' => 'numeric',
            'delivery_id' => 'numeric'
        ] );
        if( $validation->fails() ) {
            return back();
        }

        if( $binder = Binder::where( 'code', $import_data->code )->first() ) {
            $binder->update( [
                'price' => $import_data->price,
                'pages' => $import_data->pages
            ] );
        } else {
            Binder::create( [
                'code' => $import_data->code,
                'name' => $import_data->name,
                'number' => $import_data->number,
                'price' => $import_data->price,
                'pages' => $import_data->pages,
                'delivery_id' => $import_data->delivery_id
            ] );
        }
    }
});

导入csv之后,我的返回back()根本不起作用,控制器仍在执行foreach,如何启用我的验证?

1 个答案:

答案 0 :(得分:0)

您将从chunk()方法返回,然后继续调用相同chunk()方法的下一次迭代,依此类推。我建议将整个事件包装在try-catch-block中并抛出异常。

编辑:像这样:

try {
    Excel::filter( 'chunk' )->load( $path . $filename )->chunk( 1000, function( $results ) {
        foreach ( $results as $import_data ) {
            // ...
            if( $validation->fails() ) {
                throw new Exception();
            }
            // ...
        }
    )};
} catch (Exception $e) {
    return back();
}