Я использую Laravel -Excel и имею проблему с импортом моих данных из CSV-файла.
Когда я пытаюсь импортировать мой CSV-файл, он возвращает ошибки проверки
errors: {name: ["The name field is required."], stock: ["The stock field is required."],…}
name: ["The name field is required."]
price: ["The price field is required."]
stock: ["The stock field is required."]
message: "The given data was invalid."
Пока все эти данные представлены в моем CSV-файле
Код
Класс импорта
<?php
namespace App\Imports;
use App\Product;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use Maatwebsite\Excel\Concerns\Importable;
class ProductsImport implements ToModel, WithBatchInserts, WithChunkReading
{
use Importable;
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new Product([
'name' => $row['name'],
'stock' => $row['stock'],
'sku' => $row['sku'],
'price' => $row['price'],
'bottom_price' => $row['bottom_price'],
'cover' => $row['cover'],
]);
}
public function batchSize(): int
{
return 500;
}
public function chunkSize(): int
{
return 500;
}
}
Контроллер
public function import(Request $request)
{
Excel::import(new ProductsImport, $request->file('file'));
return response()->json([
'message' => 'Products are successfully imported.'
]);
}
Маршрут
Route::post('products/import', 'Api\ProductsController@import');
Есть идеи, что может быть не так?
Обновление
Component script
importFile() {
this.importFile = this.$refs.importFile.files[0];
let formData = new FormData();
formData.append('file', this.importFile, this.importFile.name);
axios.post( '/api/admin/products/import', formData, {
headers: {
'Content-Type': 'multipart/form-data',
Authorization: localStorage.getItem('access_token')
}
}).then(res => {
this.$notify({
title: 'Hooray!',
message: res.data.message,
offset: 100,
type: 'success'
});
})
.catch(error => {
var errors = error.response.data;
let errorsHtml = '<ol>';
$.each(errors.errors,function (k,v) {
errorsHtml += '<li>'+ v + '</li>';
});
errorsHtml += '</ol>';
this.$notify.error({
title: 'Import Error',
dangerouslyUseHTMLString: true,
message: errorsHtml
});
});
},