バージョン選択

フォーラム

メニュー

オンライン状況

80 人のユーザが現在オンラインです。 (74 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 80
もっと...

サイト内検索

質問 > フロント機能 > Criteria で複数条件での絞り込み検索がしたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2020/3/5 17:23
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Criteria で複数条件での絞り込み検索がしたい
EC-CUBE 4.0.3

TOPバナーに表示期間を保持するようにしたいです。

News Entity を参考にしながら Banner Entity を作成し、クラス内変数に start_date と end_date を追加しました。

次のように実装することで、表示期間内のバナーは取得することができました。

src/Eccube/Repository/BannerRepository.php
    /**
     * @return Banner[]|ArrayCollection
     */
    public function getList()
    {
        // second level cacheを効かせるためfindByで取得
        $Results = $this->findBy(['visible' => true], ['sort_no' => 'DESC']);

        // 表示期間でフィルター
        $criteria = Criteria::create();
        $criteria->where(Criteria::expr()->lte('start_date', new \DateTime()));
        $criteria->andWhere(Criteria::expr()->gt('end_date', new \DateTime()));

        $Banners = new ArrayCollection($Results);

        return $Banners->matching($criteria);
    }


しかし、表示期間を指定していないバナー(start_date, end_date が null)が取得できません。
イメージ的には、上記のフィルタリングの箇所で、
start_date IS NULL OR start_date >= new \DateTime()
のような判定がしたいです。

どうすれば良いでしょうか?
h_tanaka
投稿日時: 2020/3/5 18:27
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: Criteria で複数条件での絞り込み検索がしたい
こちらをヒントに解決できました。
https://stackoverflow.com/questions/9095113/how-to-use-andwhere-and-orwhere-in-doctrine

src/Eccube/Repository/BannerRepository.php
    /**
     * @return Banner[]|ArrayCollection
     */
    public function getList()
    {
        // second level cacheを効かせるためfindByで取得
        $Results = $this->findBy(['visible' => true], ['sort_no' => 'DESC']);

        // 表示期間でフィルター
        $criteria = Criteria::create();
        $criteria->where(Criteria::expr()->orX(Criteria::expr()->lte('start_date', (new \DateTime())->setTime(0,0,0)), Criteria::expr()->isNull('start_date')));
        $criteria->andWhere(Criteria::expr()->orX(Criteria::expr()->gte('end_date', (new \DateTime())->setTime(0,0,0)), Criteria::expr()->isNull('end_date')));

        $Banners = new ArrayCollection($Results);

        return $Banners->matching($criteria);
    }


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,858名です
総投稿数は109,996件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1294
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.