> フロント機能 > DBを連結させ、Twigで表示させたい |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
boss12 |
投稿日時: 2016/3/22 16:08
対応状況: −−−
|
常連 登録日: 2016/2/17 居住地: 投稿: 53 |
DBを連結させ、Twigで表示させたい ECCUBE3.0系 ver3.09
新しくページtestpage.twigを作り、controllerに $Product = $app['orm.em']->getRepository('\Eccube\Entity\Product') ->findBy( array('id' => 'DESC') ); return $app['view']->render('Block/test.twig', array( 'test' => $Product, )); と記述したとします。(多少省略しています。) ページで商品の対応状況(データベースでいうとdtb_orderのstatus)の数字もしくは文字を表示させたいのですが、 どこにどのような記述をしたら良いのでしょうか? 通常のphpであれば、INNERJOINして取り出せるのですが、ECCUBEの場合がわかりません。 どなたかわかる方、ご教授願います。 |
tacky |
投稿日時: 2016/3/23 10:09
対応状況: −−−
|
長老 登録日: 2015/10/3 居住地: Tokyo 投稿: 277 |
Re: DBを連結させ、Twigで表示させたい Entityのリレーションでしたらこちらが参考になると思います。
http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associations DoctrineにはSQLに似たDQLというのが書けますので下記参考になると思います。 http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html |
shhirose |
投稿日時: 2016/3/23 12:28
対応状況: −−−
|
一人前 登録日: 2014/4/24 居住地: 投稿: 94 |
Re: DBを連結させ、Twigで表示させたい Block/test.twig に
と記載すると、名称(公開/非公開)が表示されます。
と記載すると、ID (1/2)が表示されます。 EC-CUBE3 では Doctrine というフレームワークを使用しており、 src/Eccube/Resource/doctrine/Eccube.Entity.Product.dcm.yml というファイルでリレーションの情報が設定されています。 この状態で、リレーション先の情報を twig 等で使用しようとすると、内部的に SQL が発行され、リレーション先のデータを取得することができます。 |
boss12 |
投稿日時: 2016/3/23 12:41
対応状況: −−−
|
常連 登録日: 2016/2/17 居住地: 投稿: 53 |
Re: DBを連結させ、Twigで表示させたい tacky様。ありがとうございます。
shhirose様。 少し説明不足でした。 dtb_productのstatus(表示・非表示)ではなく、dtb_orderのstatus(注文状況)をdtb_productと一緒にとりたく、 dtb_productとdtb_order_detailをproduct_idで連結させ、さらにそのdtb_order_detailとdtb_orderをorder_idで連結させればいけるんじゃないかと思っております。 略すると、dtb_productと、それに対応するdtb_orderのstatusをとりたいです。 doctrineの英語ページやsymfony2のページを見ましたが、あまり理解できませんでした。 |
shhirose |
投稿日時: 2016/3/23 14:21
対応状況: −−−
|
一人前 登録日: 2014/4/24 居住地: 投稿: 94 |
Re: DBを連結させ、Twigで表示させたい 引用:
これは、ある商品規格に紐づく受注の一覧を取得し、その対応状況を表示したいということでしょうか。
これで、$id の規格IDを持つ受注(Order)の一覧が取得できると思います。 ※もし規格ではなく、商品で行いたい場合は、od.Product にして、渡すパラメータも ProductClass ではなく、Product にしてあげれば良いかと思います。 ※実際に試してはいないので、上手く動かない可能性がありますので、動かない場合は適宜修正してください。 |
boss12 |
投稿日時: 2016/3/24 13:30
対応状況: −−−
|
常連 登録日: 2016/2/17 居住地: 投稿: 53 |
Re: DBを連結させ、Twigで表示させたい $em = $app['orm.em'];//パターン3ver1
$query = $em->createQuery('SELECT p,od,o FROM ECCUBE\Entity\Product p, Eccube\Entity\OrderDetail od, Eccube\Entity\Order o WHERE od.Order = o.id AND p.id = od.Product AND p.Creator = 3'); $Product = $query->getResult(); 少し変わりましたが、これである程度うまくいったのですが、すべての列?が取得されてしまいます。 なので、 $em = $app['orm.em'];//パターン3ver2 $query = $em->createQuery('SELECT p,od,o FROM ECCUBE\Entity\Product p LEFT JOIN Eccube\Entity\OrderDetail od ON p.id = od.Product LEFT JOIN Eccube\Entity\Order o ON od.Order = o.id WHERE p.Creator = 3'); $sellProduct = $query->getResult(); このように変えました。 しかし、これでは何も取得できませんでした。 上の構文はどこが間違っているでしょうか? よろしくお願いいたします。 |
boss12 |
投稿日時: 2016/3/25 14:46
対応状況: 解決済
|
常連 登録日: 2016/2/17 居住地: 投稿: 53 |
Re: DBを連結させ、Twigで表示させたい createQueryBuilderを使用し、一応解決しました。
表示がうまくいかないので、実際取得できているかわからないですが、、、。 少し進んできて、初期の内容と少し異なるので、別途スレッドを立てました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |