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

分かりやすくを意識して情報発信!

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

データベースからデータを抽出するのに非常に便利なメソッドfind。

findだけでも他にfindByとfindOneByとfindAllがある。

メソッド名で、ある程度おおよその推測は付くのだが、比較して整理したいと思う。

各find()の比較

検証用Eccubeバージョン

  • Eccube version4.0.6

前提

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

dtb_tag (タグテーブル)
サンプルとしてデータを保存してます。

通常ではありえないが、新商品という値を2つ作成しています。

find

引数にidのみ指定可能

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

結果

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

findAll()

引数は無し

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

結果

全てのレコードを返します。

findBy()

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

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

結果

指定した値の2つのレコードを返しています。

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

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

結果

sort_noの降順となりました。

findOneBy

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

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

結果

2つのレコードの内、上にあるレコードのみ取得しました。

findByと同じように第2引数で昇順、降順の指定してレコード順を変えると取得するレコードも変わります。

それでは以上です!

最後に

Eccubeはsymfonyのフレームワークで構成されています。

もし「自力でもっとカスタマイズしたい」や「仕事でEccubeで開発することになった」方には、下記のsymofony4 入門の参考書をおすすめします。

こちらの参考書にはEccubeのカスタマイズ方法については、記載されてませんがカスタマイズに必要な知識のEntity、Controller、twig、Repositoryなどの利用方法が非常に分かりやすく書かれています。筆者も仕事でEccubeに携わることとなり、参考書を購入し理解が深まりました。

symfonyはLaravelと密接している部分もありLaravelの構成部分の理解も深まり有益でした。
価格帯は若干高めですが、中身はしっかりしているので、購入して損はないと思います。

ではhave a good development day!