質問 > 管理機能 > カテゴリの取得について |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ゲスト |
投稿日時: 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
|
ゲスト |
投稿日時: 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: カテゴリの取得について 引用:
カテゴリ一覧を取得し、商品登録の画面である条件の場合は特定のカテゴリを非表示にしたいのですが その認識でよろしいかと存じます。 別スレッドの流用ですが、下記URLで同様の問題を取り扱っていますので参考になさって下さい。 http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=17624&forum=11&viewmode=flat&order=ASC&start=0
|
ゲスト |
投稿日時: 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
|
ゲスト |
投稿日時: 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を参照して下さい。
|
nyorai |
投稿日時: 2016/6/16 12:16
対応状況: −−−
|
仙人 登録日: 2015/8/21 居住地: 投稿: 302 |
Re: カテゴリの取得について whereは上書きなので、条件を追加をする場合はandWhereです。
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |