バージョン選択

フォーラム

メニュー

オンライン状況

66 人のユーザが現在オンラインです。 (54 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 66
もっと...

サイト内検索

質問 > その他 > TaxRuleEventSubscriver.phpでgetProduct()がnullになる

その他

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
umebius
投稿日時: 2017/3/30 13:07
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
この行ではじかれてると思います。

https://github.com/doctrine/doctrine2/blob/v2.4.8/lib/Doctrine/ORM/UnitOfWork.php#L2605

        foreach ($class->associationMappings as $field => $assoc) {
            // Check if the association is not among the fetch-joined associations already.
            if (isset($hints['fetchAlias']) && isset($hints['fetched'][$hints['fetchAlias']][$field])) {
                continue;
            }


私もこの挙動は疑問ですけどね。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

hmorita_j
投稿日時: 2017/3/30 11:52
対応状況: −−−
長老
登録日: 2017/3/3
居住地: 沈黙の巨大都市松戸
投稿: 222
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
確かに、p.ProductClassesを外したらうまくいきました。

doctrineをあまり理解しておらずわからないのですが、
なぜProductClassesをselectしているとTaxRuleEventSubscriver.phpでgetProduct()がnullになってしまうのでしょうか?

参考になるサイトなどありましたらご教示いただけるとうれしいです。
umebius
投稿日時: 2017/3/30 11:25
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
問題は'p.ProductClasses'をselectしていることだと思います。

ちょっと前のバージョンはしていなかったはずなのですが...



あえてoneToManyのリレーションをselectする意味があるのかどうなのか、詳しく見ていないので分かりませんが。

高速化目的ならFETCH EAGERの方が良いと思います。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

umebius
投稿日時: 2017/3/30 11:19
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
カートは見ていませんが、商品詳細はここが原因だと思います。
ProductController、ProductRepositoryのこの書き方だとEventSubscriberでNULLになるはずです。

※ProductController
    public function detail(Application $app, Request $request, $id)
    {
        $BaseInfo = $app['eccube.repository.base_info']->get();
        if ($BaseInfo->getNostockHidden() === Constant::ENABLED) {
            $app['orm.em']->getFilters()->enable('nostock_hidden');
        }

        /* @var $Product \Eccube\Entity\Product */
        $Product = $app['eccube.repository.product']->get($id); // ここのgetメソッド
 }



※ProductRepository
    /**
     * get Product.
     *
     * @param  integer $productId
     * @return \Eccube\Entity\Product
     *
     * @throws NotFoundHttpException
     */
    public function get($productId)
    {
        // Product
        try {
            $qb = $this->createQueryBuilder('p');
            $qb->addSelect(array('pc', 'cc1', 'cc2', 'pi', 'ps'))
                ->innerJoin('p.ProductClasses', 'pc')
                ->leftJoin('pc.ClassCategory1', 'cc1')
                ->leftJoin('pc.ClassCategory2', 'cc2')
                ->leftJoin('p.ProductImage', 'pi')
                ->innerJoin('pc.ProductStock', 'ps')
                ->where('p.id = :id')
                ->orderBy('cc1.rank', 'DESC')
                ->addOrderBy('cc2.rank', 'DESC');

            $product = $qb
                ->getQuery()
                ->setParameters(array(
                    'id' => $productId,
                ))
                ->getSingleResult();
        } catch (NoResultException $e) {
            throw new NotFoundHttpException();
        }

        return $product;
    }


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

hmorita_j
投稿日時: 2017/3/30 10:28
対応状況: −−−
長老
登録日: 2017/3/3
居住地: 沈黙の巨大都市松戸
投稿: 222
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
すみません!
ありがとうございますm(_ _)m
h_tanaka
投稿日時: 2017/3/30 10:26
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
購入確認ではうまく反映されているのですね^^;

商品詳細ではControllerやServiceではセットしていないようです。
どこでセットされているか調べますので、お時間ください。
hmorita_j
投稿日時: 2017/3/30 10:17
対応状況: −−−
長老
登録日: 2017/3/3
居住地: 沈黙の巨大都市松戸
投稿: 222
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
ShoppingControllerと今回の事象がどういう関係にあるのかがちょっとわからないので、もう一度整理させてください。

[事象]
個別税率を設定した際、特定ページで個別税率が反映されない(デフォルトの税率が反映されてしまう)

[個別税率が反映されるページ]
商品一覧
購入確認

[個別税率が反映されないページ]
商品詳細
カート

[確認したこと]
商品の税込価格はTaxRuleEventSubscriver.phpでセットされているはずだが、通常なら取得できるProductエンティティがnullとなっており、そのために該当のTaxRuleを取得できていない。
$entity->setPrice01IncTax($this->taxRateService->getPriceIncTax($entity->getPrice01(), $entity->getProduct(), $entity));

ここの $entity->getProduct()がnullになっています。




h_tanaka
投稿日時: 2017/3/30 9:39
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
もっとスマートな調べ方はあるかもしれませんが、私はこの方法でデバッグしています。
h_tanaka
投稿日時: 2017/3/30 9:38
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
エンティティのgetProduct()がnullということは、エンティティに本来セットするはずの$Productがnull、もしくはsetProduct()がコールされていないということです。
ShoppingController.phpの1311行目でsetされている$Productは1288行目でgetしています。
さらにそこでgetされている$Productをどこでsetされているかを追って・・・
と、順に元をたどっていけば原因がつかめると思います。
hmorita_j
投稿日時: 2017/3/30 9:33
対応状況: −−−
長老
登録日: 2017/3/3
居住地: 沈黙の巨大都市松戸
投稿: 222
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
すみません、私が理解できていないのですが、ShoppingControllerの1311行目は以下なのですが、何をデバッグすれば良いでしょうか?


$ShipmentItem->setShipping($Shipping)
                            ->setOrder($Order)
                            ->setProductClass($ProductClass)
                            ->setProduct($Product)
                            ->setProductName($Product->getName())
                            ->setProductCode($ProductClass->getCode())
                            ->setPrice($ProductClass->getPrice02())
                            ->setQuantity($quantity);


« 1 (2) 3 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,886名です
総投稿数は110,000件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.