7

此查询适用于 5.2:

    $galleries = Gallery::with(array(
            'images' => function ($query) {
                $query->orderBy('order', 'asc');
            }
        ))
        ->with('votes')
        ->leftJoin('votes', 'votes.votable_id', '=', 'gallery.id')
        ->selectRaw(
            'gallery.*, count(case votes.status when "upvote" then 1 else null end) - count(case votes.status when "downvote" then 1 else null end) as points'
        )
        ->where('votes.votable_type','App\Gallery')
        ->groupBy('gallery.id')
        ->orderBy('points', 'desc')
        ->published()->orderBy('gallery.created_at', 'desc')->paginate(30);

我正在尝试选择所有有投票的画廊,当我在 5.3 中运行它时,我得到了这个

 1/2 PDOException in Connection.php line 333: SQLSTATE[42000]: 
Syntax error or access violation: 1055 'images.gallery.title' isn't in GROUP BY 

SQLSTATE[42000]: Syntax error or access violation: 1055 'images.gallery.title' isn't in 
GROUP BY (SQL: select gallery.*, count(case votes.status when "upvote" then 1 else null end) - count(case votes.status when "downvote" then 1 else null end) 
as points from `gallery` left join `votes` on `votes`.`votable_id` = `gallery`.`id`
where `votes`.`votable_type` = App\Gallery and `published` = 1 group by `gallery`.`id` 
order by `points` desc, `gallery`.`created_at` desc limit 30 offset 0)
4

2 回答 2

12

转到您的 config/database.php 文件夹。在 mysql 配置数组中,更改strict => truestrict => false,一切都会正常工作。

于 2016-09-09T03:07:09.667 回答
1

根据文档,您的加入查询应该像这个参考 -:https ://laravel.com/docs/5.3/upgrade#upgrade-5.3.0

 $galleries = Gallery::with(array(
        'images' => function ($query) {
            $query->orderBy('order', 'asc');
        }
    ))
    ->with('votes')
    ->leftJoin('votes',function($query){
                 $query->on('votes','gallery')->where('votes', 'votes.votable_id', '=', 'gallery.id')->where('votes.votable_type','App\Gallery');   })->selectRaw(
        'gallery.*, count(case votes.status when "upvote" then 1 else null end) - count(case votes.status when "downvote" then 1 else null end) as points'
    )
    ->groupBy('gallery.id')
    ->orderBy('points', 'desc')
    ->published()->orderBy('gallery.created_at', 'desc')->paginate(30);
于 2016-08-24T11:14:35.647 回答