问题描述
我正在尝试将多个行从Excel文件导入数据库。如果行数等于或大于5,则记录会成功添加到数据库中,但是如果我尝试的记录少于5,则会出现SQL错误。
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'customer_name' cannot be null (SQL: insert into `shipments` (`user_id`,`customer_name`,`customer_address`,`customer_email`,`customer_phone`,`destination_country`,`destination_city`,`service_type`,`tb_date`,`tb_time`,`pickup_location`,`product_name`,`quantity`,`consignment_no`,`weights_id`,`product_value`,`product_reference`,`remarks`,`status`,`updated_at`,`created_at`) values (2,?,1220125,1,Booked,2020-10-26 12:26:29,2020-10-26 12:26:29))
这是我的导入课程
<?php
namespace App\Imports;
use App\Shipment;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
Use Auth;
use App\Settings;
use App\ShipmentTracking;
use App\Alert;
class ShipmentImport implements ToCollection,WithHeadingRow
{
public function __construct($weight_id)
{
$this->weight_id= $weight_id;
}
public function collection(Collection $rows)
{
$user_id = Auth::User()->id;
foreach ($rows as $row)
{
$consign_no = Settings::where('name','consign_no')->first()->value;
$increment = $consign_no+1;
$initial = "12".date("y");
$consignment_no1 = $initial.$increment;
$update_setting = Settings::where('name','consign_no')->first();
$update_setting->value = $increment;
$update_setting->save();
$shipment = Shipment::create([
'user_id' => $user_id,'customer_name' => $row['customer_name'],'customer_address' => $row['customer_address'],'customer_email' => $row['customer_email'],'customer_phone' => $row['customer_phone'],'destination_country' => $row['destination_country'],'destination_city' => $row['destination_city'],'service_type' => $row['service_type'],'tb_date' => $row['tb_date'],'tb_time' => $row['tb_time'],'pickup_location' => $row['pickup_address'],'product_name' => $row['product_name'],'quantity' => $row['product_quantity'],'consignment_no' => $consignment_no1,'weights_id' => $this->weight_id,'product_value' => $row['product_value'],'product_reference' => $row['product_reference'],'remarks' => $row['remarks'],'status' => 'Booked',]);
}
}
}
我有Laravel版本7。 我使用的Excel文件包是:maatwebsite / excel:3.1
解决方法
这可能是一个老问题,但这可以帮助您
export const getStaticProps = async (context) => {
// get news here
return {
...
revalidate: 60 * 60 * 6,}
}
在你的导入类上实现这个
try {
Excel::import(new YourImportClass(),request()->file('importar_datos'));
return back()->with("toast_success","Empleados importados correctamente");
}catch(\Exception $e)
{
return back()->with("toast_error","Line error " . $e->failures()[0]->row() . " on column: " .
$e->failures()[0]->attribute() . "with message " . $e->failures()[0]->errors()[0] );
}
还有一个叫做 SkipEmptyrow 的函数 你可以在这里查看文档 https://docs.laravel-excel.com/3.1/imports/validation.html#skipping-empty-rows