SQLを書き換える †この方法はEC-CUBE4系でも使えます。 EC-CUBE本体で生成しているSQL文をプラグイン側で変更したい場合は、フックポイントで受け取ったQueryBuilderを getDQLPart() や resetDQLPart() を使用して書き換えることができます。 WHERE句を取得したい場合 dump($qb->getDQLPart('where')); WHERE句をリセットしたい場合 $qb->resetDQLPart('where'); ORDER BY句をリセットしたい場合 $qb->resetDQLpart('orderBy'); WHERE句の内容を付け替える場合 // WHERE句を保持 $whereParts = $qb->getDQLPart('where')->getParts(); // WHERE句をリセット $qb->resetDQLPart('where'); foreach ($whereParts as $part) { // name検索を付け替え if (strpos($part, 'NORMALIZE(p.name)') !== false) { $qb->andWhere('1 = 1'); } else { $qb->andWhere($part); } } getDQL() で取得してstr_replaceなどで書き換えられるかもしれない。 実行されるSQL文を確認する †この方法はEC-CUBE4系でも使えます。 dump($qb->getQuery()->getSQL()); パラメーターの確認 dump($qb->getQuery()->getParameters()); 論理削除のデータを取得する †この方法はEC-CUBE3系だけで使えます。 一時的にフィルタを無効化してデータを取得します。 $filters = $app['orm.em']->getFilters()->disable('soft_delete'); $results = $qb->getResult(); $filters = $app['orm.em']->getFilters()->enable('soft_delete'); フィルタは以下のファイルにて適用されています。 // filters $config = $em->getConfiguration(); $config->addFilter("soft_delete", '\Eccube\Doctrine\Filter\SoftDeleteFilter'); $config->addFilter("nostock_hidden", '\Eccube\Doctrine\Filter\NoStockHiddenFilter'); $config->addFilter("incomplete_order_status_hidden", '\Eccube\Doctrine\Filter\OrderStatusFilter'); $em->getFilters()->enable('soft_delete'); CAST関数を使用したい †拡張すれば利用できるようになります。 こちらを参考にさせていただきました。 Symfony2【Doctrine DQL関数拡張】MySQL(PostGreSQL)のNOW,ROUND,FLOOR,GROUP_CONCAT等の関数を使用(EC-CUBE3) |