symfonyを触り始めた人へのDoctrine(ORM)入門2
こんにちは。木戸です。
前回の記事symfonyを触り始めた人へのDoctrine(ORM)入門を書いてから、半年以上経っていることに驚きを隠せません。
前の記事で「データを自分の欲しい形にカスタマイズして取得する方法」を書くと宣言していたので、今回はデータの取得について書いてきます。
超便利なfindBy()
前回、プライマリーキー以外でデータを取得する際はfindBy()を使うと書きました。そしてこのfindBy()がめっちゃ便利なので紹介します。
findBy()で出来ること
- データの取得
- ソート
- データ件数の制限
- 開始位置の指定
初めて知った時「え、findBy()でここまで出来るん!?」と驚きました。これを知らなかった時に長いコードを書いた覚えがあります…
この記事を見てくれている皆さんが、僕みたいに長いコードを書かなくて済むようにfindBy()の使い方を説明していきます。
※findBy()のソースが気になる方は、Doctrine\ORM\EntityRepositoryのfindBy()を見てください。
peopleに登録されているデータ(主キーはid)
id:1, lastName:佐藤, firstName:太一, age:31
id:2, lastName:佐藤, firstName:太郎, age:41
id:3, lastName:佐藤, firstName:俊一郎, age:21
id:4, lastName:佐藤, firstName:翔, age:21
id:5, lastName:鈴木, firstName:一郎, age:51
id:6, lastName:鈴木, firstName:次郎, age:46
id:7, lastName:鈴木, firstName:三郎, age:41
id:8, lastName:高橋, firstName:大輝, age:21
id:9, lastName:高橋, firstName:海斗, age:22
id:10, lastName:高橋, firstName:拓海, age:23
データの取得
前回の記事と被りますがカラムの値を指定してデータを取得する方法です。
$name= '佐藤';
$peopleList = $em->getRepository(people::class)->findBy([
'lastName' => $name
]);
- 取得結果
- id:1, lastName:佐藤, firstName:太一, age:31
- id:2, lastName:佐藤, firstName:太郎, age:41
- id:3, lastName:佐藤, firstName:俊一郎, age:21
- id:4, lastName:佐藤, firstName:翔, age:21
ソートしてデータを取得
ソートする際は第二引数にソートする対象のカラムと並び順を追加します。
苗字が佐藤さんのデータを年齢の高い順に取得します。
$name= '佐藤';
$peopleList = $em->getRepository(people::class)->findBy( ['lastName' => $name], ['age' => 'DESC' ] );
- 取得結果
- id:2, lastName:佐藤, firstName:太郎, age:41
- id:1, lastName:佐藤, firstName:太一, age:31
- id:3, lastName:佐藤, firstName:俊一郎, age:21
- id:4, lastName:佐藤, firstName:翔, age:21
第二引数のソート条件を加えると、1つ目のキーと条件でデータが等しかった場合、2つ目のキーと条件でソートされます。
苗字が佐藤さんのデータを年齢の高い順、年齢が同じ場合、idの降順にソートし取得します。
$name= '佐藤';
$peopleList = $em->getRepository(people::class)->findBy( ['lastName' => $name], ['age' => 'DESC', 'id' => 'DESC'] );
- 取得結果
- id:2, lastName:佐藤, firstName:太郎, age:41
- id:1, lastName:佐藤, firstName:太一, age:31
- id:4, lastName:佐藤, firstName:翔, age:21
- id:3, lastName:佐藤, firstName:俊一郎, age:21
データ件数の制限
データ件数を制限して取得する際は第三引数に欲しいデータの件数を渡します。
※今回はデータ絞り込み、並び替えを行わないので、第一、第二引数に空の配列を渡します。
$name= '佐藤';
$peopleList = $em->getRepository(people::class)->findBy( [], [], 5 );
- 取得結果
- id:1, lastName:佐藤, firstName:太一, age:31
- id:2, lastName:佐藤, firstName:太郎, age:41
- id:3, lastName:佐藤, firstName:俊一郎, age:21
- id:4, lastName:佐藤, firstName:翔, age:21
- id:5, lastName:鈴木, firstName:一郎, age:51
開始位置の指定
データ件数の制限を行い、次のデータが欲しい際に第四引数にどの位置からデータを取得するのかの指定を行えます。
例:「データ件数の制限」を行い次の5件が欲しい際
※第四引数に5が入っている場合、最初から5件目までのデータを飛ばして6件目のデータから取得を行います、
$name= '佐藤';
$peopleList = $em->getRepository(people::class)->findBy( [], [], 5, 5 );
- 取得結果
- id:6, lastName:鈴木, firstName:次郎, age:46
- id:7, lastName:鈴木, firstName:三郎, age:41
- id:8, lastName:高橋, firstName:大輝, age:21
- id:9, lastName:高橋, firstName:海斗, age:22
- id:10, lastName:高橋, firstName:拓海, age:23
簡単なデータの取得ならfindBy()で対応できそうですね
次回は、クエリビルダを使ってデータを取得する方法を書こうと思います。
どうしても知りたいという方は、こちらをご確認ください。
関連記事
- symfonyを触り始めた人へのDoctrine(ORM)入門
- symfonyを触り始めた人へのDoctrine(ORM)入門2(表示中)
- symfonyを触り始めた人へのDoctrine(ORM)入門3
- symfonyを触り始めた人へのDoctrine(ORM)入門4