Blog

PG::GroupingError: ERROR: must appear in the GROUP BY clause or be used in an aggregate function

Laravelをherokuにデプロイすると上記エラーがでた

原因は herokuで利用するPostgresSQL DBが groupByが使えないということ

Postgres 良くないんですね。

ドキュメントに

注意: 他のSQLデータベース管理システムでの作業に親しんだユーザは、count集約関数がテーブル全体に適用される場合の性能に失望するかも知れません。

   public function show(Request $request,Group $group)
    {
        // ここのgroupByがだめでした。
        $materials = $group->materials()->groupBy('main_word')->get();
  

        return view('group.play',compact('materials'));
    }

 

このように変更しました

   public function show(Request $request,Group $group)
    {
        //ここのgroupByがだめでした。
        // $materials = $group->materials()->groupBy('main_word')->get();
        $material_group = $group->materials()->get();
        $materials = $material_group->unique('main_word');
        return view('group.play',compact('materials'));
    }

 

その前にしたこと herokuのログをたくさん出す

herokuの公式サイト

次のコマンドを打つことにより、

app/config/logging.php に設定を書き込んでくれる

heroku config:set LOG_CHANNEL=errorlog

heroku config:set LOG_CHANNEL=stderr

 

リアルタイムでのログを確認

heroku logs --tail

 

groupByが使えないのは驚きましたが、問題解決しました


一つ前の記事 Laravel CRUD Readまとめ サルだとわからん
次の記事 Vue.js入門-1環境構築