こんにちは!@vVv_kenshi_vVvです!
ドキュメント読んで、手順通りに学んだわけではないので参考程度に見てください。
Repository拡張方法
基本的に本体のソースはアップデートで変更になる可能性があるので、拡張して使用するのが安全です。
新規Repositoryファイルを作成
ファイル保存場所:Customize\Repository\ProductRepository.php
・Repositoryファイル「ProductRepository.php」を作成
<?php
namespace Customize\Repository;
use Eccube\Repository\ProductRepository as BaseRepository;
class ProductRepository extends BaseRepository
{
/**
* 新規メソッドの作成
*
* @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情報を取得しなおせば解決
コメント