2016-12-15 51 views
1

如何通過它來計算更新數據的列 我有表項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'); 
} 

任何解決方案?謝謝你的回答,抱歉的英語不好:)

回答

3

試試這個:

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

謝謝先生,你是天才! –

+0

這個解決方案更好,因爲它只會創建一個查詢'更新項目集庫存=庫存 - 2 where item_id = 2'。給予好評。 –

1

你可以嘗試這樣的事:

$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

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 

    } 
+0

嘗試重構此代碼,並且您可能會在兩行中實現相同 –

+0

肯定感謝您的建議... – Sona

1

這應該做的伎倆爲您

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

    return redirect('order'); 
} 
+0

謝謝先生,您是天才! –

+0

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