Laravel 从一个表单中插入多条记录

Posted

技术标签:

【中文标题】Laravel 从一个表单中插入多条记录【英文标题】:Laravel Insert multiple records from one form 【发布时间】:2020-10-18 07:36:34 【问题描述】:

我正在处理一项向项目添加额外内容的任务,我有一个选择字段来添加 item_id 并将其保存到数据库中的 extras 表中。

我正在尝试添加超过 1 个项目以节省我的时间,而不是向其他项目添加相同的额外项目。

我将只分享一项的当前代码工作:

查看:

 !! Form::select('food_id', $food, null, ['class' => 'select2 form-control']) !!

我尝试让它插入多个 id:

!! Form::select('food_id[]', $food, null, ['class' => 'select2 form-control', 'multiple'=>'multiple']) !!

控制器:

public function create()

    $this->foodRepository->pushCriteria(new FoodsOfUserCriteria(auth()->id()));
    $food = $this->foodRepository->groupedByRestaurants();
    $extraGroup = $this->extraGroupRepository->pluck('name', 'id');

    $hasCustomField = in_array($this->extraRepository->model(), setting('custom_field_models', []));
    if ($hasCustomField) 
        $customFields = $this->customFieldRepository->findByField('custom_field_model', $this->extraRepository->model());
        $html = generateCustomField($customFields);
    
    return view('extras.create')->with("customFields", isset($html) ? $html : false)->with("food", $food)->with("extraGroup", $extraGroup);

显示错误:

ErrorException (E_NOTICE) 数组到字符串的转换

错误亮点:

    foreach ($segments as $segment) 
        $result .= (array_shift($replace) ?? $search).$segment;
    

'food_id' => '整数'

如果我 print_r($request->all()); 它会显示这个结果:

Array ( [_token] => p1oO45NAnBfqvMHm [name] => 23 => [price] => 9 [food_id] => Array ( [0] => 33 [1] => 34 ) [extra_group_id] => 4 ) 

希望我解释清楚,等待帮助:) 谢谢

【问题讨论】:

你在哪里使用foreach 【参考方案1】:

你可以试试这个

 if(count($request->food_id) > 0)
        for($i = 0; $i < count($request->food_id); $i++)
            $object = new Model();
            $object->food_id = $request->food_id[$i];
            $object->save();
         
    
    

【讨论】:

感谢回复,错误:如果我将上面的代码放在 store 函数中,则尝试分配非对象的属性 'food_id' 检查 return $request->all(); 你可以在你的函数中添加 $request->except('_method', '_token');【参考方案2】:

感谢所有试图帮助我的人员,我想分享我为完成它所做的解决方案:

     $input = $request->all();
     $food_ids = $input['food_id'];
     foreach($food_ids as $food_id) 
       $input['food_id'] = $food_id;
       ...
       ...

       $extra = $this->extraRepository->create($input);
     

【讨论】:

以上是关于Laravel 从一个表单中插入多条记录的主要内容,如果未能解决你的问题,请参考以下文章

仅当一个字段作为数组提供时,Laravel Eloquent 才插入多条记录

使用 Laravel 一次插入多条记录

Laravel 批量插入许多具有相同形式的条目

提交表单后,Laravel 将 ID 从一个表插入到另一个表

如何使用单一表单(Laravel)在 2 个表中插入记录?

从一个未绑定的表单 vba 访问添加多条记录