首页 > 解决方案 > Laravel Excel 导入中是否有限制行功能?

问题描述

我正在使用 maatwebsite/excel 包导入 CSV 文件。我无法限制导入的行。就像我需要上传文件中的前“n”行一样。我看到了一个界面

WithLimit

但是当我将它与 Limit() 一起使用时。它会引发一些错误,例如我尝试插入的某些表值是空的。我认为它正在使用列的限制。是否有任何解决方法来解决问题?

我的控制器

 class FinancialTransController extends Controller
{
    public function store(Request $request)
    {
        Excel::import(new FinancialTrans, request()->file('myfile'));
        return 'success';
    }
}

这是我的导入类

class FinancialTrans implements ToModel,WithHeadingRow

{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {  
        return new FinancialTran([
             'module_id' =>$row['sr'],
             'tran_id'=>$row['sr'],
             'amount'=>$row['sr'],
             'crdr'=>$row['sr'],
             'tran_date'=>$row['date'],
             'acad_year'=>$row['academic_year'],
             'entry_mode'=>$row['sr'],
             'voucher_number'=>$row['voucher_no'],
             'br_id'=>$row['sr'],
        ]);
    }
    public function headingRow(): int
    {
        return 6;
    }

}

标签: laravellaravel-excel

解决方案


WithHeadingRow 加载所有先前的行。改用接口 WithStartRow。

use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithStartRow;
use Maatwebsite\Excel\Concerns\WithLimit;

class FinancialTrans implements ToModel, WithLimit, WithStartRow
{
    protected $startRow;

    public function __construct(int $startRow)
    {
        $this->startRow = $startRow;
    }
    ... 
    public function startRow(): int
    {
        return $this->startRow;
    }

    public function limit(): int
    {
        return 10;
    }

推荐阅读