この方法はEC-CUBE4系でも使えます。
EC-CUBE本体で生成しているSQL文をプラグイン側で変更したい場合は、フックポイントで受け取ったQueryBuilderを getDQLPart() や resetDQLPart() を使用して書き換えることができます。
WHERE句を取得したい場合
dump($qb->getDQLPart('where'));
WHERE句をリセットしたい場合
$qb->resetDQLPart('where');
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); } }
この方法はEC-CUBE4系でも使えます。
dump($qb->getQuery()->getSQL());
この方法はEC-CUBE3系だけで使えます。
一時的にフィルタを無効化してデータを取得します。
取得後はフィルタを有効に戻します。
$filters = $app['orm.em']->getFilters()->disable('soft_delete'); $results = $qb->getResult(); $filters = $app['orm.em']->getFilters()->enable('soft_delete');
フィルタは以下のファイルにて適用されています。
src/Eccube/ServiceProvider/EccubeServiceProvider.php
// 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');