查询生成器:orderBy在群组之后不工作

问题描述:

我有一个主要查询将按照以下方式运行。我必须检查一个条件,如果条件满足,它将添加一个语句与现有的查询。但它不能以正确的方式工作意味着我无法使用现有的函数运行orderby函数?为什么这个或如何解决这个问题?查询生成器:orderBy在群组之后不工作

$query = DB::table('users') 
       ->join('products','products.auth_id','users.id') 
       ->Join('reviews','products.id','reviews.product_id') 
       ->select('products.*','users.avatar',DB::raw('(sum(rating)/count(user_id)) as rating'))    
       ->where('products.status','=','1')   
       ->groupBy('products.id') 
       ->latest(); 


if($request->get('dropdown')!='0' && $request->get('dropdown')=='desc') 
{ 
    $query->orderBy('products.regular_price', 'desc') ; 
} 

$products = $query->get(); 
+0

您的查询似乎有问题。你能编辑你的问题,并显示你打算的原始MySQL查询,以及预期的输出吗? –

+0

我怀疑从产品表开始这个查询,不是用户表会有所帮助。但我看到你依靠MySQL的“怪癖”(允许删除“group by”子句)。在最近的版本中,'group by'奇怪的默认行为已经发生了变化,现在比以前更符合标准,因此任何具有“group by”删节的查询都可能因此而失败。 –

试试这个

if($request->get('dropdown')!='0' && $request->get('dropdown')=='desc') 
{ 
    $query = $query->orderBy('products.regular_price', 'desc') ; 
} 

注意:您已经在您的查询中添加latest()功能。这个功能加入您的查询以下

ORDER BY created_at DESC

latest()默认参数是created_at

+0

由于最新()当我删除它,即使在我的查询,但最新()你的解决方案无法正常工作..可以再次检查它吗? – User57

+0

为什么要在查询中添加最新内容。我已经在我的回答中解释了最新的工作。 @ User57 –

+0

如果我需要展示最新的产品和基于价格怎么办..还有其他声明与现有的我没有发布..所以我需要保持最新的一个。 – User57