有没有办法在DB :: raw中插入值? Laravel

时间:2018-03-16 09:43:37

标签: php html mysql laravel

我有一个产品表,其中有一个名为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表。或者我是以错误的方式接近这个。

我很难处理数组,所以请耐心等待。

2 个答案:

答案 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
]);

您当然也需要更新您的产品数量。