我正在尝试创建一个购物车,我想发布多个具有相同名称的字段并对其进行处理
<?php foreach($datacart as $datacart) { ?>
<form method="post" action="/update-cart">
<input type="hidden" name="rowid" value="{{$datacart->rowid}}">
<input type="text" name="quantity" value="{{$datacart->quantity}}">
<?php }>
<input type="submit" value="update">
</form>
public function update_cart(request $request){
$rowId = $request->rowid;
$quantity = $request->quantity;
Cart::update($rowId, $quantity);
}
首先使用foreach显示所有产品。然后每个项目都有一个隐藏的rowid和数量。
以下代码显示了我的控制器。但是使用此代码,它只会更新一项(无效)。但是我想分别更新每种产品的数量
忘记了,我使用https://github.com/Crinsane/LaravelShoppingcart作为购物车插件
答案 0 :(得分:1)
首先让我们改善刀片文件,可以使用刀片语法而不是PHP,因此在这里:
<form method="post" action="/update-cart">
@csrf
@foreach($datacart as $datacart)
<input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
<input type="text" name="quantity[]" value="{{$datacart->quantity}}">
@endforeach
<input type="submit" value="update">
</form>
因此请注意,输入元素的名称属性现在接受多个值作为数组。然后在您的控制器中对其进行处理,您可以执行以下操作:
public function update_cart(Request $request) {
foreach ( $request->rowid as $index => $id ) {
Cart::find($id)->update(['quantity' => $request->quantity[$index]]);
}
}
-编辑
刚刚测试过在模型上调用update
是因为静态方法无效。
答案 1 :(得分:0)
因此,您需要做的是在html标记中定义输入是一个像这样的数组:
即在输入元素名称旁边使用方括号[]
<?php foreach($datacart as $datacart) { ?>
<form method="post" action="/update-cart">
<input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
<input type="text" name="quantity[]" value="{{$datacart->quantity}}">
<?php }>
<input type="submit" value="update">
</form>
,然后在controller方法中处理请求时,您需要像这样处理它:
public function update_cart(request $request) {
foreach ($request->rowid as $index => $rowid) {
$quantity = $request->quantity[$index];
Cart::where('id', $rowId)
->update([
'quantity' => $quantity
]);
}
}
答案 2 :(得分:0)
您需要在名称后添加[]
<input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
<input type="text" name="quantity[]" value="{{$datacart->quantity}}">
然后在您的控制器方法中
public function update_cart(Request $request) {
for ($i = 0; $i < count($request->input('rowid')); $i++) {
$cart = Cart::find($request->input('rowid')[$i];
$cart->quantity = $request->input('quantity')[$i];
}
}
答案 3 :(得分:0)
谢谢。这段代码对我有用。我用于索引循环
<input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
<input type="text" name="quantity[]" value="{{$datacart->quantity}}">
,
for ($i = 0; $i < count($request->input('rowid')); $i++){
Cart::update($request->rowid[$i], $request->quantity[$i]);
}