如何在laravel 5中获得max()

时间:2016-03-18 12:55:21

标签: php mysql laravel

我想通过最近的created_at从表中获取值。所以我使用了max(created_at)。但是我得到了错误的价值。

例如:

Order.No => created_at

102 => 2016年3月12日

103 => 2016年3月16日

我的结果应为 Order.No 103 ,因为它具有最大创建日期。但是我得到了Order.No 102作为我的结果。我的代码如下:

$result = Order::select(DB::raw('id,order_number,end_date,start_date,max(created_at)'),DB::raw('(datediff(end_date,start_date)+1) as Days'))->orderBy('created_at', 'desc');
$result->where('main_order', 1);
$result->where('deleted_at','=', NULL);
$result->where('customer_id', Input::get('id'));
$results = $result->get()->toArray();

我的结果是:

max(created_at):"2016-03-16"
order_number:"102"    
Days:29
end_date:"2016-03-30"
id:"813115592a364d45b60aa73e7cace5d3"
start_date:"2016-03-02"

我收到了正确的max(created_at)但错误的order_number。我在代码中犯了什么错误....?任何人都可以帮我吗??? 提前致谢

2 个答案:

答案 0 :(得分:0)

尝试使用orderBy,如下所示:

$latestDate = Order::orderBy('created_at', 'desc')->first();

然后在查询中使用此变量。

答案 1 :(得分:0)

尝试这个

    $result = Order::select(DB::raw('id,order_number,end_date,start_date,max(created_at)'),DB::raw('(datediff(end_date,start_date)+1) as Days'));
$result = $result->where('main_order', 1);
$result = $result->where('deleted_at','=', NULL);
$result = $result->where('customer_id', Input::get('id'));
$results = $result->max('created_at')->get()->toArray();

如果您使用max()方法,则不再需要order_by()方法