Laravelでデータベースからレコードを取得するときに使えるgroupBy()メソッドを紹介します。
groupByメソッドの使い方を知りたい人
groupByメソッドの使い方
groupBy()メソッドとは
データベースからレコードを取得するとき、指定したカラムで同じ値を複数持つレコードは重複せず取得できるようにするメソッドです。
groupBy()メソッドの使い方
例えば、以下のようなテーブルがあったとします。
行ってみたい外国の国名と都市:countriesテーブル
id | country | city |
1 | アメリカ | ニューヨーク |
2 | オーストラリア | シドニー |
3 | 中国 | 上海 |
4 | フランス | パリ |
5 | アメリカ | ニューヨーク |
6 | 中国 | 上海 |
7 | オーストラリア | メルボルン |
8 | アメリカ | ラスベガス |
「国名」を重複せず「国名」を取得したい場合、
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メソッドとは?使い方を解説します』でした。