バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > その他 > SQLの記述について

その他

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2016/6/22 15:27
対応状況: −−−
Re: SQLの記述について
記載ミスのため一度取り消します
DELIGHT
投稿日時: 2016/6/22 10:26
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: SQLの記述について
本スレッドの主旨とは違いますが、そもそも商品を分類するためのカテゴリと処理を制御するためのカテゴリが
同一のブランチの中に混在していることで様々な問題が発生しているように思います。

私だったら商品登録画面に権限フィールドを追加し、カテゴリ機能とは独立させます。

どうしてもカテゴリで実現する必要があるのであれば、下記のような構造にします。

カテゴリルート
┣食器
┣インテリア
┗権限
 ┣店舗A
 ┗店舗C

これも叶わないようであれば、せめて制御に関するカテゴリは最上位に配置します。

カテゴリルート
┣店舗A
┃┣食器
┃┗インテリア
┗店舗C
 ┣食器
 ┗インテリア



どういう方法を採るにせよ、設計を今一度見なおしてはいかがでしょうか?


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

DELIGHT
投稿日時: 2016/6/21 18:42
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: SQLの記述について
EC-CUBE2と比べてEC-CUBE3(というよりそのフレームワーク)は
ドキュメントにせよQ&Aサイトにせよ日本語の情報が多くありません。

英語に苦戦するのは分かりますが、EC-CUBE3を自力でカスタマイズするのであれば英語の読解は必須です。

厳しいことを言うようですが、カスタマイズの規模に対してkaosan様のフレームワークに関する基礎知識が足りていません。
疑問が一つ解ければまた一つ疑問が生まれることが明白な以上、私としては地力を向上していただくために
ドキュメントへの誘導やソースコードの追い方を教える他ありません。

もしそれが叶わないようであれば、プロフェッショナルに外注するか、
より平易でSQL直書きもできるEC-CUBE2系での開発をお勧めいたします。

上記を踏まえた上で、クエリビルダでのIN句の使用方法は公式ドキュメントにあります。
http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/query-builder.html#the-expr-class

IN句でサブクエリを使う方法までは書いてありませんが、
EXISTS句等でサブクエリを使う方法は記載されているのでそれを参考にして下さい。

"doctrine query builder subquery"で調べれば似たようなQ&Aはいくらでも出てきます。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

ゲスト
投稿日時: 2016/6/21 17:17
対応状況: −−−
Re: SQLの記述について
ありがとうございました。
おかげ様で、ほしい情報が取得されていることが確認できました。


EC-CUBEというかDoctrineが初めてで独自の記述方が勉強しながらですが英語のものが多く理解に時間がかかってしまっているのですが
SQL記述に関する質問でもう一つだけお聞きしてもよろしいでしょうか?

query_builderでサブクエリを使ってSQLを組む場合はどのように記述すればよいのでしょう?

ご教示いただければ幸いです。
よろしくお願いいたします。

以下に、状況の説明を載せておきます。

商品検索画面で(同じような状況が商品登録と受注検索でも使用する予定なのですが)、利用者ごとに表示されるカテゴリを絞りたいと思いましてただDoctrineでのサブクエリの記述がわかっていなったためひとまず考えがあっているかどうかという部分でハードコーディングでif文の条件分岐をさせていたのですが、やはりかっこ悪いのとたぶんセキュリティ面もあまりよくないと思いまして
コードの量も長くなってしまいますし…

商品検索を例に
SearchProductType.phpのカテゴリの部分で以下のようなSQLをquery_builderで作成したいと思っています。

・カテゴリ構成(例)
 食器
  ┣店舗A
  ┗店舗C
 インテリア
  ┣店舗B
  ┗店舗C

思惑:
ログインしているユーザ名と同じ名前のカテゴリ(カテゴリ名が店舗名になるようになっています)を取得する。

考えたSQL:
SELECT *
FORM dtb_category ca
WHERE (ca.category_id, ca.parent_category_id) IN (
SELECT Ca.category_id, Ca.parent_category_id
WHERE Ca.category_name = '取得した店舗名')

これで、取得した店舗名からカテゴリIDの同じものに対して表示を行う。
しかし、店舗Cの場合表示がこのままだと店舗Cで2個並ぶようになってしまいそれぞれの親がどちらなのかわからないという問題があります。

query_builderで作成してみたSQL
'query_builder' => function(EntityRepository $er) use($name) {
return $er->createQueryBuilder('ca')
->where('(ca.id , ca.Parent) IN (SELECT Ca.id, Ca.Parent FROM dtb_category Ca WHERE Ca.name = :name)')
->setParameter('name', $name)
->orderBy('ca.rank', 'DESC');
},
これの場合、QueryExceptionとなり
[Syntax Error] line 0, col 54: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ','
のエラーが出てしまっています。
ゲスト
投稿日時: 2016/6/21 15:07
対応状況: −−−
Re: 管理画面、受注状況をクリックした際に条件を追加したい
申し訳ございません。

再度整理をして、別スレを立てます。
DELIGHT
投稿日時: 2016/6/21 14:59
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: 管理画面、受注状況をクリックした際に条件を追加したい
このスレッドは管理画面トップのカスタマイズが話題なのに対して
aaa1234様の仰っている箇所は受注マスタ画面の件です。

「似ている」と思われるのはaaa1234様の感覚でしかなく、
少なくとも私にとってはaaa1234様がどういう状況なのか分かりかねます。

現在の状況を整理した上で別スレッドにて投稿して下さい。


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

ゲスト
投稿日時: 2016/6/21 14:46
対応状況: −−−
管理画面、受注状況をクリックした際に条件を追加したい
直接的に前の内容に関係はないのですが
似ていると思われる内容がありましたので、こちらで質問させていただきます。
上の方ももしかしたら、同じような状況で今頃調べたり悩んだりしているかも??

上の方は、表示時にもカテゴリを絞っているようですが
私は表示は絞らない予定なのですがクリックして受注検索に遷移した際にはカテゴリで絞りたいと思っています。
現状(初期)では、対象のステータスのみが検索条件に追加されている状態となります。
表示自体はAdminController.phpで行っているためそこからの処理なのかと思ったのですがうまく追えずに詰まってしまいました。

この先の処理がまだあまり理解できていないのですが、どのようにしてカテゴリ等で絞るようにできるのか
ご教示お願いできれば幸いです。

よろしくお願いいたします。
DELIGHT
投稿日時: 2016/6/21 13:59
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: SQLの記述について
マッピングでリレーションが設定されている場合、そのリレーションの名前自体が外部キーのフィールドを意味します。
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Resource/doctrine/Eccube.Entity.Order.dcm.yml#L204
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Repository/OrderRepository.php#L292


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

ゲスト
投稿日時: 2016/6/21 13:43
対応状況: −−−
Re: SQLの記述について
ありがとうございました。
何とか結合の部分につきましては理解できました。


dtb_order_detailのorder_idとproduct_idを結合条件に指定したいのですが
OrderDetailのymlファイルにてorder_idとproduct_idの使用する際のIDやフィールドが定義されていなく使えないようなのですがこの場合は、ymlに追記を行う必要があるのでしょうか?
最初確認しておらずidを使用したら、order_detail_idと結合されてしまい当然のようにほしい値が取れなかったのですが…

Eccube\Entity\OrderDetail:
type: entity
table: dtb_order_detail
repositoryClass: Eccube\Repository\OrderDetailRepository
indexes:
dtb_order_detail_product_id_key:
columns:
- product_id
id:
id:
type: integer
nullable: false
unsigned: false
id: true
column: order_detail_id
generator:
strategy: AUTO
fields:
product_name:
type: text
nullable: false
product_code:
type: text
nullable: true
class_name1:
type: text
nullable: true
class_name2:
type: text
nullable: true
class_category_name1:
type: text
nullable: true
class_category_name2:
type: text
nullable: true
price:
type: decimal
nullable: true
precision: 10
scale: 0
quantity:
type: decimal
nullable: true
precision: 10
scale: 0
tax_rate:
type: decimal
nullable: true
precision: 10
scale: 0
tax_rule:
type: smallint
nullable: true
unsigned: false
manyToOne:
Order:
targetEntity: Eccube\Entity\Order
inversedBy: OrderDetails
joinColumn:
name: order_id
referencedColumnName: order_id
nullable: false
Product:
targetEntity: Eccube\Entity\Product
joinColumn:
name: product_id
referencedColumnName: product_id
nullable: false
ProductClass:
targetEntity: Eccube\Entity\ProductClass
joinColumn:
name: product_class_id
referencedColumnName: product_class_id
nullable: false
lifecycleCallbacks: { }

DELIGHT
投稿日時: 2016/6/21 11:25
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: SQLの記述について
ややこしいのですが、DQLはSQLとは違う言語です。
JOINに対応するのはONではなくWITHです。
http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html


----------------
+ DAISY inc. -------------------- +
EC-CUBE構築・カスタマイズサービス
EC・WEB構築などお気軽にご相談ください。

デイジー株式会社
http://daisy.link/

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


 



ログイン



統計情報

総メンバー数は74,636名です
総投稿数は104,066件です

投稿数ランキング

1
seasoft
7333
2
468
3217
3
AMUAMU
2712
4
nanasess
2202
5
umebius
2078
6
yuh
1664
7
red
1498
8
h_tanaka
1188
9
tsuji
942
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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