Laravel 5.3查询构建器对group by的访问违规

时间:2016-12-09 10:11:43

标签: mysql sql laravel-5.3 laravel-query-builder

我一直在使用Laravel 5一周,现在我想要使用Query Builder转换所有现有的原始SQL查询,但我遇到了问题。

当我运行以下查询时,收到此错误消息

  

SQLSTATE [42000]:语法错误或访问冲突:1055   ' procurement.pp_proposals.title'不在GROUP BY

public class CustomerComparer : IEqualityComparer<Customer>
{
    public bool Equals(Customer x, Customer y)
    {
        return x.Id == y.Id && x.Name.Contains(y.Name);
    }      

    public int GetHashCode(Customer obj)
    {
        return obj.Id.GetHashCode() ^ obj.Name.GetHashCode();
    }
}

这是我的原始SQL,完全正常,所以我不明白为什么我需要在所有额外的列上使用GROUP BY

$proposals = DB::table('tableA')
                ->join('tableB', 'tableA.id', '=', 'tableB.id')
                ->leftJoin('tableC', 'tableA.id', '=', 'tableC.id')
                ->select(DB::raw('tableA.id, title, date_created, date_completed, percent_complete, complete, COALESCE(COUNT(tableC.id), 0) AS total_ids'))
                ->where([
                    ['tableB.user', '=', Auth::user()->username],
                    ['submitted', '=', '0'],
                ])
                ->groupBy('tableA.id')
                ->orderBy('title', 'asc')
                ->get();

1 个答案:

答案 0 :(得分:3)

我不确定它是如何工作的,但肯定可以通过将strict = false文件上的config/database.php设置为MySQL配置来解决该问题!

我遇到了同样的问题并将其设置为false来解决我的问题!

其实我刚刚在这里提出一个问题,找出原因!

如果您想关注:Strict database config Laravel 5.2 to Laravel 5.3