データベースからデータを抽出するのに非常に便利なメソッド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!