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

Laravel存储数组数据到数据库报错:数组转字符串转换

解决Laravel中Array to string conversion错误并实现批量订单存储

问题背景

尝试在Laravel中将客户名称(costumer_name)、客户地址(costumer_address)、客户联系电话(costumer_number),与循环生成的product[]、quantity[]数组数据存储到自增id的数据库中,已编写blade表单及控制器代码,但出现Array to string conversion错误,数据无法存入,期望数据库按如下格式存储:

idnameaddressnumberproductquantity
1Johnfili city093-256-31product1100
2Johnfili city093-256-31product2200

错误原因

  1. 数组赋值错误:控制器循环$products时,直接将整个$quantity数组赋值给quantity字段,而数据库该字段为字符串/数值类型,触发数组转字符串失败。
  2. 参数拼写错误:$address = $request->costumer_adress;中参数名拼写错误,应为costumer_address,会导致地址字段值为null。

修正后的代码

Blade表单代码(无需修改)

<form method="post" action="{{route('CheckOut')}}" enctype="multipart/form-data">
    @csrf
    <div class="container">
        Name: <input type="text" name="costumer_name" value=""/>
        Address: <input type="text" name="costumer_address" value=""/>
        Contact Number <input type="text" name="costumer_number" value=""/>
    </div>
    @foreach ($carts as $cart)
        <div class="product">
            <div class="product-details">
                <input type="text" name="product[]" value="{{ $cart->product }}" />
            </div>
            <div class="product-quantity">
                <input type="number" value="{{ $cart->quantity }}" min="1" name="quantity[]">
            </div>
            <div>
                <a href="{{ route('remove', $cart->id) }}" class="btn btn-danger btn-sm">Remove</a>
            </div>
            <div>{{ $cart->subtotal }}</div>
        </div>
    @endforeach
    <input type="hidden" id="check_out_value" value="CheckOut" readonly/>
    <input type="submit" id= "checked_out_button" class="checkout" Value="Checkout">
</form>

控制器代码修正

public function CheckOut(Request $request)
{
    // 修正拼写错误:costumer_adress → costumer_address
    $name = $request->costumer_name;
    $address = $request->costumer_address;
    $number = $request->costumer_number;
    $products = $request->product;
    $quantities = $request->quantity;

    $data = [];
    // 使用带索引的循环,匹配对应product的quantity
    foreach($products as $index => $product) {
        $data[] = [
            'name'      => $name,
            'address'   => $address,
            'number'    => $number,
            'product'   => $product,
            // 取对应索引的quantity值
            'quantity'  => $quantities[$index]
        ];
    }
    Order::insert($data);

    // 可选:添加提交成功后的跳转或提示
    return redirect()->back()->with('success', '订单提交成功');
}

关键补充:Order模型设置

确保Order模型中配置了可批量赋值的字段,否则insert方法会执行失败:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    protected $fillable = [
        'name',
        'address',
        'number',
        'product',
        'quantity'
    ];
}

验证结果

修正后提交表单,数据库将按期望格式存储数据:每条商品对应一条订单记录,客户信息随每条商品记录重复存储,自增id自动生成。

内容的提问来源于stack exchange,提问作者GelS Sy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:47:05