EC-CUBEめも

SQLを書き換える

この方法は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);
    }
}

実行されるSQL文を確認する

この方法は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');

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-09-14 (土) 18:26:48 (34d)