PR

【Laravel】groupByメソッドとは?使い方を解説します

アイキャッチ画像

Laravelでデータベースからレコードを取得するときに使えるgroupBy()メソッドを紹介します。

この記事でわかること

groupByメソッドの使い方を知りたい人

ターゲット読者

groupByメソッドの使い方

groupBy()メソッドとは

データベースからレコードを取得するとき、指定したカラムで同じ値を複数持つレコード重複せず取得できるようにするメソッドです。

groupBy()メソッドの使い方

例えば、以下のようなテーブルがあったとします。

行ってみたい外国の国名と都市:countriesテーブル

idcountrycity
1アメリカニューヨーク
2オーストラリアシドニー
3中国上海
4フランスパリ
5アメリカニューヨーク
6中国上海
7オーストラリアメルボルン
8アメリカラスベガス
countriesテーブルの内容

「国名」を重複せず「国名」を取得したい場合、

Country::groupBy('country')->get('country');

groupBy(‘country’)でcountryカラムの重複を削除し、get(‘country’)で「国名」のみを取得しています。

// 取得結果
{country: 'アメリカ'}, {country: 'オーストラリア'}, {country: '中国'}, {country: 'フランス'}

また、「都市」も重複していることが上記テーブルからわかります。

「都市」を重複せず「都市」を取得したい場合は、

Country::groupBy('city')->get('city');

とすれば良いです。

つまり、

重複を削除したいカラムをgroupBy()メソッドの引数に指定する → groupBy(‘カラム名’)
取得したいカラムをgetメソッドの引数に指定する → get(‘カラム名’)

ちなみに、取得したいカラムを指定しない場合は、get()のように引数を指定しません。
この場合は、Countryオブジェクトのレコード全てが配列で取得されます。

また、レコードを並べ替えるorderBy()メソッドを使ってから、groupBy()メソッドを使うことも多いです。

まとめ

groupBy()メソッドが活躍する場面は、

  • 回答が数多くあるアンケートのデータをまとめるとき
  • 人を対象にしたデータの述べ人数ではなく純粋な人数を出したいとき

などが考えられます。

以上、『【Laravel】groupByメソッドとは?使い方を解説します』でした。