バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

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

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
umebius
投稿日時: 2017/3/30 11:19
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: Tokyo
投稿: 671
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;
    }


----------------
//////////////////////////////
(株)U-Mebius EC-CUBE3 カスタマイズ・高速化 ・バグ修正
EC-CUBE関連技術者の採用もお問い合わせください。


umebius
投稿日時: 2017/3/30 11:25
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: Tokyo
投稿: 671
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
問題は'p.ProductClasses'をselectしていることだと思います。

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



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

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


----------------
//////////////////////////////
(株)U-Mebius EC-CUBE3 カスタマイズ・高速化 ・バグ修正
EC-CUBE関連技術者の採用もお問い合わせください。


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

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

参考になるサイトなどありましたらご教示いただけるとうれしいです。
umebius
投稿日時: 2017/3/30 13:07
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: Tokyo
投稿: 671
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;
            }


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


----------------
//////////////////////////////
(株)U-Mebius EC-CUBE3 カスタマイズ・高速化 ・バグ修正
EC-CUBE関連技術者の採用もお問い合わせください。


umebius
投稿日時: 2017/3/30 13:10
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: Tokyo
投稿: 671
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
postLoadイベント送っているのがこの行なのでProductはnullのままになってしまうはずです。
https://github.com/doctrine/doctrine2/blob/v2.4.8/lib/Doctrine/ORM/UnitOfWork.php#L2748


----------------
//////////////////////////////
(株)U-Mebius EC-CUBE3 カスタマイズ・高速化 ・バグ修正
EC-CUBE関連技術者の採用もお問い合わせください。


umebius
投稿日時: 2017/3/30 14:00
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: Tokyo
投稿: 671
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
すみません、参考になるサイトは分からないです。
見られているとは思いますが、公式ぐらいですかね。
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#reference-events-lifecycle-events


----------------
//////////////////////////////
(株)U-Mebius EC-CUBE3 カスタマイズ・高速化 ・バグ修正
EC-CUBE関連技術者の採用もお問い合わせください。


hmorita_j
投稿日時: 2017/3/30 14:09
対応状況: −−−
一人前
登録日: 2017/3/3
居住地: 沈黙の巨大都市松戸
投稿: 129
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
ありがとうございます!
まだ私の中で消化しきれておらず、勉強中です・・・
原因となっている箇所を教えていただいたので助かりました!
h_tanaka
投稿日時: 2017/3/30 14:15
対応状況: −−−
長老
登録日: 2016/7/22
居住地: 愛媛県
投稿: 275
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
umebiusさん、フォローありがとうございます!
hmorita_j
投稿日時: 2017/3/30 14:16
対応状況: −−−
一人前
登録日: 2017/3/3
居住地: 沈黙の巨大都市松戸
投稿: 129
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
h_tanakaさんもありがとうございましたm(_ _)m
umebius
投稿日時: 2017/3/30 14:32
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: Tokyo
投稿: 671
Re: TaxRuleEventSubscriver.phpでgetProduct()がnullになる
いえ、addSelectが不要な気がしてもやもやするので、理由が分かったら教えていただけると助かります。あとカートの方ですね。

https://github.com/EC-CUBE/ec-cube/commit/b93faef59dd3df1f02a0f9007580d940dd676cba


----------------
//////////////////////////////
(株)U-Mebius EC-CUBE3 カスタマイズ・高速化 ・バグ修正
EC-CUBE関連技術者の採用もお問い合わせください。


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

 



ログイン


EC-CUBEガイドブック

統計情報

総メンバー数は19,518名です
総投稿数は81,798件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1623
4
yuh
1346
5
red
1055
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
782
10
umebius
671
11
tao_s
646
12 sumida 638
13
homan
633
14 karin 609
15
468
572
16 DELIGHT 571
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.