【EC-CUBE4】リポジトリー:Repository

スポンサーリンク
スポンサーリンク

こんにちは!@vVv_kenshi_vVvです!

ドキュメント読んで、手順通りに学んだわけではないので参考程度に見てください。

スポンサーリンク

Repository拡張方法

基本的に本体のソースはアップデートで変更になり可能性があるので、拡張して使用するのが安全です。

新規Repositoryファイルを作成

ファイル保存場所:Customize\Repository\ProductRepository.php

・Repositoryファイル「ProductRepository.php」を作成

<?php

namespace Customize\Repository;

use Eccube\Repository\ProductRepository as BaseProductRepository;

class ProductRepository extends BaseProductRepository
{
    /**
     * 新規メソッドの作成
     *
     * @param null|array $ProductStatus 指定の商品ステータス
     *
     * @return Products[] 商品の配列の配列
     */
    public function getProductList($ProductStatus = null)
    {
        $qb = $this->createQueryBuilder('p');

        if ($ProductStatus) {
            $qb
                ->andWhere($qb->expr()->in('p.Status', ':Status'))
                ->setParameter('Status', $ProductStatus);
        }

        $Products = $qb->getQuery()->getResult();

        return $Products;
    }

}

・拡張するRepositoryをuse(読込み)

・extendsで拡張

本体Repositoryの拡張

・メソッド毎コピー

・必要ファイルの読込み&construct定義

設定ファイルに定義

設定ファイル:app/config/eccube/services.yaml

・新規Repositoryファイル「ProductRepository.php」を作成

・拡張するRepositoryを定義する

services:
     ・
     ・
     ・
    Customize\Repository\ProductRepository:
        decorates: Eccube\Repository\ProductRepository

データの更新がうまくいかない

カスタマイズ案件で「dtb_cart」「dtb_cart_item」に似たテーブルを作った時の事。

登録直後の「cart_item」が表示されない挙動になった。

・F5で更新すれば表示される

・DBには「cart」「cart_item」が登録されている

結論を言うとcartクラスを更新すれば問題なし!!

$this->entityManager->refresh($cart)

登録の流れ

cart登録

cart_item登録

cart_item登録後なのでcartに紐づいていないcart_itemがデータになっている。

cart情報を取得しなおせば解決

コメント

タイトルとURLをコピーしました