EC-CUBE3の受注マスターに検索項目やリスト表示項目を増やしたいというご要望は多いです。

以前受注マスターに購入商品を追加する方法受注マスターに項目追加・メニュー追加する方法を書きましたが、今回は検索条件を追加する方法を共有したいと思います。

編集するファイルはたった3つです。

  • FormTypeクラス
  • Twigテンプレート
  • Repositoryクラス

/src/Eccube/Form/Type/Admin/SearchOrderType.php

buildFormメソッドの最後に追記します。

 $builder->add('buy_product_code', 'text', array(
                'label' => '商品コード',
                'required' => false,
            ));

 

ここまで完了したら、まずは受注マスターでエラーが起きないかどうかを確認してください。
PHPの構文がおかしいと受注マスターを開けなくなります。現時点では受注マスターの見た目は何も変わらないはずです。

 

template/Admin/Order/index.twig

                  <div class="col-md-6">
                      <div id="search_box_main__buy_product_code" class="form-group">
                          <label>商品コード</label>
                          {{ form_widget(searchForm.buy_product_code) }}
                      </div>
                  </div>

ここまで完了したら、まずは受注マスターで商品コードの検索フォームが表示されるかどうかを確認してください。
(商品コードでの検索はまだできません)
エラーになる場合はまずどこに問題があるかを確認してください。

 

/src/Eccube/Repository/OrderRepository.php

最後にRepositoryを修正して実際の検索ロジックを設定します。getQueryBuilderBySearchDataForAdminメソッド内のreturn直前に追記します。

        // buy_product_code
        if (isset($searchData['buy_product_code']) && Str::isNotBlank($searchData['buy_product_code'])) {
            if(!$joinedOrderDetails){
                $qb
                    ->leftJoin('o.OrderDetails', 'od');
                $joinedOrderDetails = true;
            }
            $qb->andWhere('od.product_code LIKE :buy_product_code')
                ->setParameter('buy_product_code', '%' . $searchData['buy_product_code'] . '%');
        }

 

これで商品コードによる絞り込みが完成しました。
なお上のコードは部分一致による絞り込みですので、完全一致にしたい場合は
setParameter(‘buy_product_code’, ‘%’ . $searchData[‘buy_product_code’] . ‘%’);を
setParameter(‘buy_product_code’, $searchData[‘buy_product_code’] );に変更してください。