You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中将Excel数据与文本输入框值一同插入数据库

Excel导入同步插入表单额外字段实现方案

核心实现逻辑

通过构造函数将表单提交的额外参数(本例为price)注入到Import类中,避免在Import类内直接全局调用request,降低耦合,适配不同场景的参数传递需求。

1. 修正Blade表单(必须加文件上传的enctype属性)

<!-- 表单必须添加enctype="multipart/form-data" 否则无法正常上传文件 -->
<form method="POST" action="{{ route('your.upload.route') }}" enctype="multipart/form-data">
    @csrf
    <input type="text" name="price" />
    <input type="file" name="bulk_file" />
    <button type="submit">导入</button>
</form>

2. 修改Controller代码

将表单获取的price参数通过构造函数传递给ProductsImport实例,可提前加参数校验提高稳定性:

public function bulk_upload(Request $request)
{
    // 提前做参数合法性校验
    $request->validate([
        'price' => 'required|numeric',
        'bulk_file' => 'required|file|mimes:xlsx,xls,csv'
    ]);
    
    if($request->hasFile('bulk_file')){
        // 把price参数传入ProductsImport构造函数
        $import = new ProductsImport($request->input('price'));
        Excel::import($import, $request->file('bulk_file'));
    }
    return back();
}

3. 修改ProductsImport类代码

新增私有属性接收price参数,新增构造函数赋值,入库时直接使用该属性,同时删除冲突的ToModel接口(ToCollection和ToModel不可同时使用):

class ProductsImport implements ToCollection, WithHeadingRow, WithValidation
{
    private $rows = 0;
    // 新增私有属性存储传入的price
    private $price;

    // 新增构造函数接收参数
    public function __construct($price)
    {
        $this->price = $price;
    }

    public function collection(Collection $rows) {
        $canImport = true;
        if($canImport) {
            foreach ($rows as $row) {
                $productId = Product::create([
                            'name' => $row['name'],
                            'added_by' => Auth::user()->user_type == 'seller' ? 'seller' : 'admin',
                            'user_id' => Auth::user()->user_type == 'seller' ? Auth::user()->id : User::where('user_type', 'admin')->first()->id,
                            'category_id' => 24,
                            'brand_id' => !empty($row['brand_id']) ? $row['brand_id']: 0,
                            // 使用传入的price属性,修正原代码的语法错误(多余分号)
                            'price' => $this->price
                ]);
            }

            flash(translate('Products imported successfully'))->success();
        }
    }

    // 原有校验规则等其他代码保持不变
}

内容的提问来源于stack exchange,提问作者Jahidul Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:54:04