エンジニ屋.com(エンジニヤドットコム)

日々得たWebエンジニアに関する情報をアウトプットしてます!

【比較】find・findAll・findBy・findOneBy 【Eccube4 symfony】

データベースからデータを抽出するのに非常に便利なメソッドfind。 findだけでも他にfindByとfindOneByとfindAllがある。メソッド名で、ある程度おおよその推測は付くのだが、比較して整理したいと思う。

各find()の比較

検証用Eccubeバージョン

  • Eccube version4.0.6

前提

具体例に沿って解説する為にEccubeデフォルトのデータベースのタグテーブルとtagRepositoryを使用します。(非常にシンプルなテーブルとRepository構成なので)

dtb_tag (タグテーブル) f:id:enginiya:20211027220633p:plain
サンプルとしてデータを保存してます。 通常ではありえないが、新商品という値を2つ作成しています。

find

引数にidのみ指定可能

$result = $this->tagRepository->find("2")  
dump($result)

結果
f:id:enginiya:20211027215003p:plain

結果でも分かる通り、Id2のレコードが取得できてます。

findAll()

引数は無し

 $result = $this->tagRepository->findAll();
 dump($result);

結果
f:id:enginiya:20211027215520p:plain
全てのレコードを返します。

findBy()

引数にカラムと値を配列で指定が可能

$result = $this->tagRepository->findBy(['name' => '新商品']);
dump($result);

結果
f:id:enginiya:20211027220946p:plain
指定した値の2つのレコードを返しています。

並び替えが必要な時は、第2引数に並び替えのカラム名、
そしてASC(昇順)かDESC(降順)を記載して取得できます。

$result = $this->tagRepository->findBy(['name' => '新商品'],['sort_no' => 'desc']);
dump($result);

結果
f:id:enginiya:20211027221354p:plain

sort_noの降順となりました。

findOneBy

findByと同じようにカラムと値を配列で指定します。

$result = $this->tagRepository->findOneBy(['name' => '新商品']);
dump($result);

結果
f:id:enginiya:20211027221716p:plain
2つのレコードの内、上にあるレコードのみ取得しました。
findByと同じように第2引数で昇順、降順の指定してレコード順を変えると取得するレコードも変わります。

それでは以上です!

最後に

Eccubeはsymfonyのフレームワークで構成されています。もし「自力でもっとカスタマイズしたい」や「仕事でEccubeで開発することになった」方には、下記のsymofony4 入門の参考書をおすすめします。
こちらの参考書にはEccubeのカスタマイズ方法については、記載されてませんがカスタマイズに必要な知識のEntity、Controller、twig、Repositoryなどの利用方法が非常に分かりやすく書かれています。筆者も仕事でEccubeに携わることとなり、参考書を購入し理解が深まりました。 symfonyはLaravelと密接している部分もありLaravelの構成部分の理解も深まり有益でした。
価格帯は若干高めですが、中身はしっかりしているので、購入して損はないと思います。

ではhave a good development day!