EC-CUBE3ではSQLを自分で書くことはほとんどありません。代わりに世界的なORM – Object Relational MapperであるDoctrine(ドクトリン)をフルに活用しています。

Doctrineで必ずといっていいほど使用するfindBy(findOneBy)メソッドについて、あまり知られていない第3引数、第4引数とともに使い方をご紹介します。

findByとは?

findByはDoctrine\ORM\EntityRepositoryクラスのメソッドです。EC-CUBEではDBテーブルからデータを取得したい時にはこのレポジトリクラスを起点にします。会員テーブルであればsrc\Eccube\Repository\CustomerRepositoryクラスです。EC-CUBE3のコントローラでは$app[‘eccube.repository.customer’]という形式でアクセスすることができます。

createQueryBuilderを使ってクエリを組み立てていっても良いのですが、シンプルな用途にはfindByという便利メソッドが用意されています。

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#by-simple-conditions

findByの使い方

・男性の会員一覧を取得

$Customers = $app[‘eccube.repository.customer’]->findBy(array(‘Sex’ => 1))

最も単純な例で、第一引数にWHEREの条件を配列で設定します。

 

・男性または女性の会員一覧を取得

$Customers =$app[‘eccube.repository.customer’]->findBy(array(‘Sex’ => array(1, 2)))

条件の値に配列を使うと WHERE ~ IN (1,2)というようにOR検索になります。

 

・苗字が「山田」という男性の会員一覧を取得

$Customers =$app[‘eccube.repository.customer’]->findBy(array(‘name01’ => ‘山田’, ‘Sex’ => 1))

条件配列に複数の要素を持たせるとAND検索になります。

 

・男性の会員一覧を登録日が新しい順に取得

$Customers =$app[‘eccube.repository.customer’]->findBy(array(‘Sex’ => 1), array(‘create_date’ => ‘DESC’))

第二引数は並び順を指定することができます。DESCではなくASCにすると古い順になります。

 

・男性の会員で登録日が新しい10人を取得

$Customers =$app[‘eccube.repository.customer’]->findBy(array(‘Sex’ => 1), array(‘create_date’ => ‘DESC’), 0,  10)

第三引数は取得開始位置、第四引数は所得件数になります。SQLでいうLIMIT句として使用されます。

 

以上のように、findByを使用すると大抵のデータは取得できそうです。もっと複雑なクエリが必要な場合はQueryBuiderを使用したり自分でSQLを書いたりすることもできますのでご安心を!

関連するカスタマイズ

Doctorineで設定できるフィールドタイプ... EC-CUBE3が採用しているSymfonyの標準ORM、Doctorineで設定できるフィールドタイプをまとめました。 EC-CUBE3で開発するならこれはもう覚えちゃっても良いかもしれませんね。 dcm.ymlやマイグレーションで頻繁に使いますからね。 stringやintegerのよ...
Catchable Fatal Error: Object of class DateTime co... EC-CUBE3のTwigテンプレートで{{ Order.order_date }}のように書き受注日時を表示しようとすると、Catchable Fatal Errorが出ることがあります。 Twig_Error_Runtime in Template.php line 182: An ex...
注文確認画面のお届け日を変更する方法... 結論 : ShoppingServiceのgetFormDeliveryDates()を確認する。 config.ymlでdeliv_date_end_maxを設定すると表示される選択肢の日数を変更できる。 注文時に選択可能なお届け日を調整する方法をご紹介します。 この選択可能な日付のリス...
Nginxでのリライトと高速化設定 NginxでEC-CUBE3系を動作させる場合の設定について、ご紹介します。 NginxではApacheと異なり標準で用意された.htaccessが動作しないため、nginx.confへリライト設定を記述する必要があります。 サーバー上のコマンドで設定ファイルを編集します。 sudo ...

弊社はEC-CUBE公式インテグレートパートナーです。

カスタマイズやプラグイン開発お任せください