> フロント機能 > ソート順の追加のためのJOINの方法 |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
nakunaru |
投稿日時: 2016/1/18 23:55
対応状況: −−−
|
半人前 登録日: 2015/3/16 居住地: 投稿: 14 |
ソート順の追加のためのJOINの方法 お世話になります。
商品一覧画面でのソート順を追加するために以下の設定を行いました。 ・mtb_product_list_order_byに1行追加(id:3 name:売り上げ順 rank:3) ・ProductRepository.php の // Order By // 価格順 の部分を以下のように変更(else ifブロックの追加) // Order By // 価格順 if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == '1') { //@see http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html $qb->addSelect('MIN(pc.price02) as HIDDEN price02_min'); $qb->innerJoin('p.ProductClasses', 'pc'); $qb->groupBy('p'); $qb->orderBy('price02_min', 'ASC'); // 新着順 } else if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == '2') { $qb->orderBy('p.create_date', 'DESC'); // 売り上げ順 } else if (!empty($searchData['orderby']) && $searchData['orderby']->getId() == '3') { $qb->addSelect('COUNT(od.order_id) as HIDDEN ocount'); $qb->innerJoin('p.OrderDetail', 'od'); $qb->groupBy('p'); $qb->orderBy('ocount', 'DESC'); } else { ・・・・後略・・・・ この状態でソート処理を走らせると以下のエラーが発生します。 QueryException in QueryException.php line 63: [Semantical Error] line 0, col 100 near 'od WHERE p.Status': Error: Class Eccube\Entity\Product has no association named OrderDetail 意図としては、過去の売り上げ点数の降順でソートした結果を得たいのですが、Doctrineの仕組みがまだ良くわかっておらず手間取っております。 おそらくテーブル同士の関連性の設定ができていないということだと思うのですが、どの辺りを触ればよいか教えてください。 宜しくお願い致します。 |
tacky |
投稿日時: 2016/1/19 16:11
対応状況: −−−
|
長老 登録日: 2015/10/3 居住地: Tokyo 投稿: 277 |
Re: ソート順の追加のためのJOINの方法 ymlファイルにOrderDetailへのリレーションを
src/Eccube/Resource/doctrine/Eccube.Entity.Product.dcm.yml EntityにOrderDetailを定義すればいけると思います。 src/Eccube/Entity/Product.php |
nakunaru |
投稿日時: 2016/1/20 15:29
対応状況: −−−
|
半人前 登録日: 2015/3/16 居住地: 投稿: 14 |
Re: ソート順の追加のためのJOINの方法 アドバイスありがとうございます。
以下を各ファイルに追加しました。 Product.php 189行目付近に以下を追加 Product.dcm.ymlに以下を追加 menyToMany: OrderDetail: targetEntity: Eccube\Entity\OrderDetail mappedBy: Product この状態でのエラーが以下の通り [Semantical Error] line 0, col 100 near 'od WHERE p.Status': Error: Class Eccube\Entity\Product has no association named OrderDetail Productに、OrderDetailへの関連の設定が何かしら必要なのはわかるのですが、どう書くべきかよくわかっておりません。 引き続きアドバイスを頂ければと思います。 |
tacky |
投稿日時: 2016/1/20 16:20
対応状況: −−−
|
長老 登録日: 2015/10/3 居住地: Tokyo 投稿: 277 |
Re: ソート順の追加のためのJOINの方法 Product.phpへは$OrderDetailを定義するだけでよいと思います。
Product.dcm.ymlのoneToManyへの追加になります。 定義は上記であってると思います。 |
nakunaru |
投稿日時: 2016/1/20 22:16
対応状況: 解決済
|
半人前 登録日: 2015/3/16 居住地: 投稿: 14 |
Re: ソート順の追加のためのJOINの方法 お世話になります。
おかげ様でうまくできました。 少しずつDoctrineの気持ちがわかってきたので、色々と試してみようと思います。 どうもありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |