提问人:GelS Sy 提问时间:11/17/2023 最后编辑:ADysonGelS Sy 更新时间:11/17/2023 访问量:82
在Laravel的数据库中存储数组数据[重复]
Storing array data in the database in Laravel [duplicate]
问:
我试图将数组数据存储在数据库中,我没有收到错误消息,它没有将其存储在数据库中。这是我在边栏选项卡文件中的代码
<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>
我试图将costumer_name、costumer_address costumer_number与循环中的数据(即 product[] 和 id 为自动递增的 quantity[] 一起存储。
这是我在控制器中的代码
public function CheckOut(Request $request)
{
$name = $request->costumer_name;
$address = $request->costumer_adress;
$number = $request->costumer_number;
$products = $request->product;
$quantity = $request->quantity;
$data=[];
foreach($products as $product) {
$data[]=[
'name' => $name,
'address' => $address,
'number' => $number,
'product' => $product,
'quantity' => $quantity
];
}
Order::insert($data);
}
它给了我错误
数组到字符串的转换
数据库中的预期输出:
编号 | 名字 | 地址 | 数 | 产品 | 数量 |
---|---|---|---|---|---|
1 | John | 菲利市 | 093-256-31 | 产品1 | 100 |
2 | John | 菲利市 | 093-256-31 | 产品2 | 200 |
答:
-1赞
SdeWijs
11/17/2023
#1
在我看来,您正在对 Order::insert() 进行批量分配。您在订单模型中插入的所有字段是否都$fillable数组?文档
你的订单模型应该包含这样的东西,甚至可以像你现在所做的那样插入任何数据:
protected $fillable = ['name', 'address', 'number', 'product', 'quantity']
否则,您将获得当前结果,并且不会在您的订单表中实际存储任何内容。
评论
0赞
GelS Sy
11/17/2023
是的,所有字段都$fillable在模型中。如果不在控制器中使用 foreach,它只会将最后一个数据存储在我的刀片中,我想要我的刀片文件中显示的所有内容。
1赞
Pippo
11/17/2023
Insert() 不需要$fillable,允许在一次调用中输入多个记录,但不会填充日期。
1赞
ADyson
11/17/2023
#2
你得到的原因
数组到字符串的转换
是因为你插入的是一个数组,但试图把它放到一个文本字段中。$quantity
您需要从数量数组中选择与您要插入的产品匹配的项目。如果使用循环遍历产品,则可以使用循环计数器轻松地从产品和数量数组中选择正确的项目。for
例如:
$data=[];
for($i = 0; $i < count($products); $i++) {
$data[]=[
'name' => $name,
'address' => $address,
'number' => $number,
'product' => $products[$i],
'quantity' => $quantity[$i]
];
}
Order::insert($data);
评论
0赞
GelS Sy
11/17/2023
我一直在寻找我的问题,但我似乎没有找到正确的答案。谢谢。
0赞
mickmackusa
11/22/2023
我添加了更多重复目标,这些目标实际上演示了如何处理包含不可重复和可重复字段混合的表单提交。怎么样 ?Order::insert(array_map(fn($p, $q) => ['name' => $name, 'address' => $address, 'number' => $number, 'product' => $p, 'quantity' => $q], $products, $quantity));
评论
contentType: false
告诉jQuery根本不发送任何标头,这意味着接收方将不知道如何解析请求正文。删除它。Content-Type
echo