使用 maatwebsite/excel 3.1 将 Excel 数据(集合行)导入 Laravel 9 数据库时出现的问题

Issue with Importing Excel Data (Collection rows) to Laravel 9 Database using maatwebsite/excel 3.1

提问人:Timothy Mach 提问时间:8/17/2023 最后编辑:Timothy Mach 更新时间:11/15/2023 访问量:112

问:

我正在尝试使用 Maatwebsite-excel 3.1 从 excel 工作表导入多行。 这是挑战,当我这样做时。 它打印所有行。但是,当我没有在没有 DD 的情况下运行代码时,它会神奇地“清空”行。 下面是我的代码dd($row)

    public function collection(Collection $rows)
    {
        $rows->shift();

        $total_amount = 0;
        foreach ($rows as $row){

            if($row->filter()->isNotEmpty()){
                $article_title =collect(trim($row[0]))[0];
                $tag = collect(trim($row[1]))[0];
                $words = collect((int) $row[2])[0];
                $deadline = collect(trim($row[3]))[0];
                $pkw = collect(trim($row[4]))[0];
                $skw1 = collect(trim($row[5]))[0];
                $skw2 = collect(trim($row[6]))[0];
                $instructions = collect(trim($row[7]))[0];
                $my_tag = UserTag::where('name', 'LIKE', '%'.$tag.'%')->first();
                $my_urgency = Urgency::where('name', 'LIKE', '%'.$deadline.'%')->first();
//                dd($tag, $words, $my_urgency);
                $amount  = $my_tag->amount_per_word * $my_urgency->amount * $words;
                $project_deadline = now()->addHours($my_urgency->hours)->format('Y-m-d H:i:s');
                Project::create([
                    'user_id'=>request()->user()->id,
                    'article_title'=>$article_title,
                    'upload_batch_id'=>$this->batch->id,
                    'user_tag_id'=>$my_tag->id,
                    'urgency_id'=>$my_urgency->id,
                    'price_per_word'=>$my_tag->amount_per_word,
                    'no_of_words'=>$words,
                    'deadline'=>$project_deadline,
                    'amount'=>($amount),
                    'primary_keyword'=>$pkw,
                    'secondary_keyword_1'=>$skw1,
                    'secondary_keyword_2'=>$skw2,
                    'instructions' => $instructions
                ]);
                $total_amount = $total_amount + $amount;
            }
        }
        $this->batch->amount = $total_amount;
        $this->batch->update();
    }

我也尝试过没有,但这也没有用。collect(trim(row[value]))

我尝试遵循这些解决方案,但没有一个对我有用

这是错误enter image description here

以下是我的 DD 声明

enter image description here

请帮帮我。

PHP Laravel Maatwebsite-Excel

评论

0赞 Timothy Mach 8/17/2023
哦,我忘了提到我的 Excel 文件中有一个列表(选择选项)。但这应该不是问题,因为在 dd($row) 中我可以看到值。

答:

1赞 Timothy Mach 8/18/2023 #1

明白了。实现到类,然后删除WithHeadingRow$rows->shift();

这将使第一行数组键。然后,您可以稍后按以下方式访问它们:

class ProjectsImport implements ToCollection, WithHeadingRow
{
   public function collection(Collection $rows){
        $total_amount = 0;
        foreach ($rows as $row){

            if($row->filter()->isNotEmpty()){

                $article_title = $row['article_name'];
    }
  }
 }
}