Laravel - 如何通过列

时间:2016-12-15 06:25:27

标签: php laravel

如何通过计算列来更新数据 我有表项目

+---------+-------+-------+-----------+
| item_id | stock | price | name      |
+---------+-------+-------+-----------+
| 1       | 10    | 9.4   | Paper     |
+---------+-------+-------+-----------+
| 2       | 10    | 12.8  | Pencil    |
+---------+-------+-------+-----------+
| 3       | 10    | 99.9  | Note Book |
+---------+-------+-------+-----------+

然后我想通过计算库存列来更新袜子

stock - $request->qty

如果我做manualy基础查询

update items set stock = stock - 3 where item_id = 1

它正在工作,但当我使用laravel雄辩时,股票变为0(零),我不知道为什么,

这是我的控制器

public function saveOrder(Request $request) {
     $item = new Item;
     $item->where('item_id', '=', $request->item_id)->update(['stock' => 'stock - '. $request->qty]);
return redirect('order');
}

任何解决方案?谢谢你的回答,抱歉英语不好:)

4 个答案:

答案 0 :(得分:3)

试试这个:

$item = new Item;
$item->where('item_id', '=', $request->item_id)->decrement('stock', $request->qty);

答案 1 :(得分:1)

您可以尝试这样的事情:

$item = Item::where('item_id', '=', $request->item_id)->first();
$item->stock = (int)$item->stock - (int)$request->qty;
$item->save();

或者,您可以尝试使用DB::raw expression

答案 2 :(得分:1)

这应该是你的伎俩

public function saveOrder(Request $request) {
    Item::where('item_id', $request->item_id)
        ->decrement('stock', $request->qty);

    return redirect('order');
}

答案 3 :(得分:0)

    public function saveOrder(Request $request){
     $stockdetails = \DB::table('tablename')->where('itemid',$request->itemid)->first(['stock as stock']);
 //update query
    $update= \DB::table('tablename')->update(['stock'=>($stockdetails->stock)-($request->quantity)])->where(itemid',$request->itemid);
    if($update){
    //sucecss
    }else{
    //Fail

    }