我有一个产品表,其中有一个名为quantity的列。我还有一个名为member_product的数据透视表,它也有一个数量列。
我希望能够使用member_product表中的数量从products表中减去数量。
类似于使用member_product作为购物车更新库存数量。我似乎无法弄明白。
Tables
products
id | name | quantity
member_product
product_id | member_id | quantity
查看
<table>
<thead>
<tr>
<th>Name</th>
<th>Qty</th>
</tr>
</thead>
@foreach($members->products as $p)
<tbody>
<tr>
<td><input type="hidden" name="productid[]" value="{{$p->id}}">{{$p->name}}</td>
<td><input type="hidden" name="qty[]" value="{{$p->pivot->qty}}">{{$p->pivot->qty}}</td>
</tr>
</tbody>
@endforeach
</table>
控制器
public function updateProduct(Request $request)
{
$productid = $request['productid'];
$qty = $request['qty'];
products = DB::table('products')
->whereIn('id', $productid)
->update(['qty' => DB::raw('qty - 1')]);
//->update(['qty' => DB::raw('qty - $qty]); (i want to execute something like this)
}
使用我当前的代码,我获得了所需的ID,并且还可以运行db::raw('qty -1')
。
是否可以在db::raw
内插入一个值,这样它就会使用我的whereIn指定的id的数量,这来自我的product_member表。或者我是以错误的方式接近这个。
我很难处理数组,所以请耐心等待。
答案 0 :(得分:1)
是的,有可能。尝试以这种方式做到这一点
public function updateProduct()
{
$productid = $request['productid'];
$qty = $request['qty'];
products = DB::table('products')
->join('member_product','member_product.product_id','=','products.id')
->whereIn('products.id', $productid)
->update(['products.quantity' => DB::raw("products.quantity - member_product.quantity")]);
}
您需要在字段名称前使用表名,以避免在查询中出现含糊不清的列名。
答案 1 :(得分:0)
更好的方法是在成员上定义belongsToMany,然后更新如下......
Member::find(1)->products()->updateExistingPivot($productId, [
'qty' => 1
]);
您当然也需要更新您的产品数量。