【问题标题】:max() function not working properly in laravel querybuildermax() 函数在 laravel querybuilder 中无法正常工作
【发布时间】:2019-06-17 07:03:31
【问题描述】:

我正在尝试使用查询获取表的最大列值:

$today = Carbon::today();
    $o_no = Prev_order::whereDate('date_time',"=", $today)->max('ord_no');
    if($o_no){
        $o_no = $o_no + 1;
    }
    else{ $o_no = 1; } 

    $orders = order::where('table_no', $request->table_no)
                    ->where('dish', $request->dname)
                    ->first();      
    if($orders != null)
    {
            $qty = $orders->dish_qty + $request->dish_qty;
            $data = [
                'dish_qty' => $qty,
            ];
            $orders = order::where('dish', $request->dname)->update($data);
    }     

return response()->json($todr);

但它在 9 之后没有给出最大值,这意味着如果最大值为 10,它给出的最大值为 9...我没有得到确切的错误。 实际上在每个提交按钮后增加价值,即订单号。当我检查以前的最大值(订单号)时,我在其中添加了 1 并更新了新的订单号。但是在这里,当值为 10 时,它通常只将值添加为 10,当我检查 max() 函数时,它给出的最大值仅为 9,到底是什么错误。

【问题讨论】:

标签: mysql laravel


【解决方案1】:

这仅仅意味着您首先从表中获取数据,然后您正在更新订单号。因此,在这种情况下,即使数据库中的订单号发生了变化,您也不会获得最大价值的升级订单号,否则请分享一些代码,以便更好地理解。

我认为 max 函数没有问题,如果您认为 max 函数不能正常工作,那么您可以尝试不同的查询。

DB::table('orders')->where('id', DB::raw("(select max(`id`) from orders)"))->get();

如果你使用的是 Eloquent 模型。

$order = Orders::whereRaw('id = (select max(`id`) from orders)')->get();

【讨论】:

  • 它工作正常,直到没有 1 到 9,但是当值为 10 时,它仍然给出最大值为 9。
  • 当我使用 get() 时,我得到了整行,我只需要那个最大值,这样我就可以更新下一个订单号,就像你看到的那样
  • 嘿,我解决了..实际上是表结构的问题..我只是将类型从 VARCHAR 更改为 INT,现在工作正常.....谢谢
  • 好吧,如果你想在 db.sounds 中的值存储上执行任何类似 + ,- 的操作,你必须采用整数类型。
猜你喜欢
  • 1970-01-01
  • 2014-01-14
  • 2020-03-19
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 2013-06-07
  • 1970-01-01
相关资源
最近更新 更多