Laravel - 如何以更新它的数据计算的

问题描述:

如何通过它来计算更新数据的列 我有表项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'); 
} 

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

试试这个:

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

谢谢先生,你是天才! –

+0

这个解决方案更好,因为它只会创建一个查询'更新项目集库存=库存 - 2 where item_id = 2'。给予好评。 –

你可以尝试这样的事:

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

另外,您可以尝试使用DB::raw expression

+0

这些是2个查询......他的努力得到它没有得到股票完成。 :| – prateekkathal

+0

OP没有提及任何关于查询或在没有获得股票的情况下完成任务。所以,我给了他两种方法来完成他的任务。 –

+0

如果你阅读他的** ** **代码,你会正确的问题。 – prateekkathal

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 

    } 
+0

尝试重构此代码,并且您可能会在两行中实现相同 –

+0

肯定感谢您的建议... – Sona

这应该做的伎俩为您

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

    return redirect('order'); 
} 
+0

谢谢先生,您是天才! –

+0

@yuliantosaparudin不是真的......但是,很高兴我可以帮忙。 :) – prateekkathal