バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

 > フロント機能 > ソート順の追加のための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の気持ちがわかってきたので、色々と試してみようと思います。
どうもありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,284名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.