バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > カテゴリの取得について

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2016/6/15 18:16
対応状況: 開発中
カテゴリの取得について
カテゴリをデータベースから取得し、twigでなくphp側での処理に利用しようとしています。
具体的にはformやcontroller部分です。

テーブルはdtb_category
情報としてほしいカラムはすべて
条件はcategory_idが対象の値のもの

という形でSQLを組みたいです。

select * from dtb_category where category_id = 1


かと思い、SQL自体は組めるのですが、
PHPでのmysql_queryモジュールはセキュリティ面から使用しない方がよいかと思いますが他での組み方がわかりません。

mysql_query以外でのモジュールなどPHPでのSQL文の組み立て方のご教授をお願いしたいと思います。
DELIGHT
投稿日時: 2016/6/15 18:28
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: カテゴリの取得について
EC-CUBE3系ではDoctrine ORMを使って下さい。下記の箇所が参考になるかと存じます。
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Controller/Admin/Product/CategoryController.php#L116
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Repository/CategoryRepository.php#L63


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

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

ゲスト
投稿日時: 2016/6/15 18:45
対応状況: 解決済
Re: カテゴリの取得について
ありがとうございました。

こういうやり方があるのですね
ゲスト
投稿日時: 2016/6/15 19:16
対応状況: 開発中
Re: カテゴリの取得について
カテゴリ一覧を取得し、商品登録の画面である条件の場合は特定のカテゴリを非表示にしたいのですが
その場合、カスタマイズする箇所というのは
src\Eccube\Form\Type\Admin\ProductType.php
のbuildFormをカスタマイズすればよいのでしょうか?

初期の場合、
食器とインテリアと新入荷とあるかと思うのですが
支店に対して、食器しか扱っていない支店の場合はインテリアに商品登録できてしまったりインテリアの在庫数が触れてしまうのはまずいかなと思いまして…

参考ページをいろいろ探して見ながら
'query_builder' => function(EntityRepository $er) {
 return $er->createQueryBuilder('ca')
  ->where('ca.category_id = :Category_Id')
  ->setParameter('Category_Id', 1);

このような感じでquery_builderを作成してみました。
これで実現したいものとしてはカテゴリの表示・非表示なので
dtb_categoryが対象のテーブルかなと思います。
category_idが対象とするカテゴリの場合表示とするようにしたいと考えています。
DELIGHT
投稿日時: 2016/6/15 19:25
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: カテゴリの取得について
引用:
カテゴリ一覧を取得し、商品登録の画面である条件の場合は特定のカテゴリを非表示にしたいのですが
その場合、カスタマイズする箇所というのは
src\Eccube\Form\Type\Admin\ProductType.php
のbuildFormをカスタマイズすればよいのでしょうか?

その認識でよろしいかと存じます。

別スレッドの流用ですが、下記URLで同様の問題を取り扱っていますので参考になさって下さい。
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=17624&forum=11&viewmode=flat&order=ASC&start=0


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

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

ゲスト
投稿日時: 2016/6/15 19:31
対応状況: −−−
Re: カテゴリの取得について
ご回答ありがとうございます。

別スレでの回答及びそちらで提示されていた参考ページより
以下の内容でquery_builderに作成してみました

参考ページをいろいろ探して見ながら
'query_builder' => function(EntityRepository $er) {
 return $er->createQueryBuilder('ca')
  ->where('ca.category_id = :Category_Id')
  ->setParameter('Category_Id', 1);

このような感じでquery_builderを作成してみました。
今回実現したいものとしてはカテゴリの表示・非表示なので
dtb_categoryが対象のテーブルかなと思います。
category_idが対象とするカテゴリの場合表示とするようにしたいと考えています。

上記を実装した場合、登録時には実装前と変わらず全カテゴリが選択できる状態で
対象カテゴリを選択した場合は正常動作を行い
対象外カテゴリを選択した場合はアクセスできませんというページに移動しますが商品としては登録されてしまう状況となります。

改善できる箇所はあるでしょうか?
DELIGHT
投稿日時: 2016/6/15 19:53
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: カテゴリの取得について
Doctrine ORMの仕様で独特なんですが、フィールド名はデータベースのフィールド名ではなくDoctrineのマッピングで定義した名前を使う必要があります。
Categoryのマッピングは下記のように記述されています。

https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Resource/doctrine/Eccube.Entity.Category.dcm.yml#L6
上記箇所がDoctrine ORM上でのフィールド名で、

https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Resource/doctrine/Eccube.Entity.Category.dcm.yml#L11
上記箇所がデータベース上のフィールド名を指定しています。

つまりca.category_idではなくca.idというフィールド名を利用して下さい。



これは他のフィールドやリレーションにも同じことが言えます。
例えばdtb_category.parent_category_idを参照したい場合は、ca.parent_category_idではなくca.Parentを指定する必要があります。
https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Resource/doctrine/Eccube.Entity.Category.dcm.yml#L40


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

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

ゲスト
投稿日時: 2016/6/16 9:39
対応状況: 開発中
Re: カテゴリの取得について
ありがとうございました。
また、お返事遅くなり申し訳ありません。


無事に1つのみ選択という状況はできました。
今はカテゴリIDなので、元のを指定したら
それしか出ないという状況ですが
これをカテゴリIDでは親を指定して、同じIDを親に持つものも表示させるようにするというように
where句を複数にする場合は

->add('Category', 'category', array(
  'label' => '商品カテゴリ',
  'multiple' => true,
  'mapped' => false,
  'query_builder' => function(EntityRepository $er) {
    return $er->createQueryBuilder('ca')
    ->where('ca.id = :Id')
    ->where('ca.Parent = :pId')
    ->setParameter('Id', 1)
    ->setParameter('pId', 1);
  },
)

今、上記のように組んでいますがシステムエラーとなってしまいます。
この部分について、調べたところwhereは複数回呼べると書いてありましたのでこのように記載し、呼び出すフィールド名も昨日ご教示いただいた内容で修正を行いました。

どの辺が悪いのかヒント等のご教示でかまいませんが、いただけたら幸いです。
よろしくお願いいたします。
DELIGHT
投稿日時: 2016/6/16 10:01
対応状況: −−−
仙人
登録日: 2010/2/3
居住地: 熊本県・九州・長野県・関東甲信越
投稿: 572
Re: カテゴリの取得について
まずwhereについては下記ドキュメントを参照して下さい。
http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/query-builder.html
http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.QueryBuilder.html
ANDやORは別の関数が用意されています。

また開発はデバッグモードにて行うことを勧めます。デバッグモードの場合はエラーの原因が表示されます。
こちらはEC-CUBEのREADMEを参照して下さい。


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

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

nyorai
投稿日時: 2016/6/16 12:16
対応状況: −−−
仙人
登録日: 2015/8/21
居住地:
投稿: 302
Re: カテゴリの取得について
whereは上書きなので、条件を追加をする場合はandWhereです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
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.