我想在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,如何启用我的验证?
答案 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();
}