laravel-5.7 - Laravel Excel Maatwebsite 3.1 行验证不起作用
问题描述
我正在尝试使用 WithValidation 关注点在导入数组上查找重复的行(稍后将使用 SkipsOnError 删除重复的行)。但是在我的导入类中设置的用于查找重复行的验证似乎不起作用。当我上传包含重复数据的 excel 文件(只是没有标题的列)时,没有返回错误并且所有行都导入数据库
<?php
namespace App\Imports;
use App\Contactlist;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\WithValidation;
class ContactsImport implements ToModel, WithValidation
{
use Importable;
private $data;
public function __construct(array $data = [])
{
$this->data = $data;
}
public function model(array $row)
{
if (!isset($row[0])) {
return null;
}
return new Contactlist(array_merge([
'nums' => $row[0],
], $this->data));
}
public function rules(): array
{
return [
//find duplicate records
'0.*' => 'distinct',
//'*.0' => 'distinct' Tried this also
];
}
}
我的控制器的代码片段
$data = [
'contact_id' => $contact->id,
];
Excel::import(new ContactsImport($data), request()->file('contact_file'));
解决方案
class ExempleImport implements ToCollection, WithHeadingRow
{
/** @var Collection */
public $collection;
/**
* @param Collection $collection
*/
public function collection(Collection $collection)
{
$this->collection = $collection->transform(function ($row) {
$this->validationFields($row);
return [
'curso' => $row['curso'],
'marca' => $row['marca'],
'status' => $row['status_do_curso'],
'emissor' => $row['emissor_cliente'],
'nome_da_conta' => $row['nome_da_conta'],
];
});
}
public function validationFields( $row )
{
$customMessages = [
'required' => 'O campo :attribute deve estar preenchido'
];
Validator::make($row->toArray(), [
'curso' => 'required',
'marca' => 'required',
'status_do_curso' => 'required',
'emissor_cliente' => 'required',
'nome_da_conta' => 'required',
], $customMessages)->validate();
}
}
在您的控制器中
$exampleImport = new ExampleImport;
try{
Excel::import( $exampleImport, $updateFile);
}catch ( ValidationException $e ){
return response()->json(['success'=>'errorList','message'=> $e->errors()]);
}
推荐阅读
- python - 从 colab 中的驱动器中的 python 脚本导入 python 模块
- postman - 邮递员如何在导入大量端点后设置环境url变量
- dart - 如何在颤动中获取文本小部件的大小
- android - 如何发出后台服务器请求?
- c# - ASP.NET MVC 错误消息“无法连接到 Visual Studio 开发服务器。”
- php - PHP 致命错误:类未捕获错误:沙盒中的类 'Aws\Rekognition\RekognitionClient'
- python - Python - 如何读取从 Tkinter 中选择的文件?
- python - Seaborn FacetGrid 在彼此旁边绘制两个不同的 y 轴
- python - 我正在尝试将 .apply 应用于 pandas 中的列,但它抛出 TypeError: 'float' object is not subscriptable
- python - 当试图可视化由 numpy.meshgrid() 生成的“常规”网格点时,我看到了白色的垂直线。为什么会这样?