> プラグイン > プラグイン内で別プラグインのEntityとデータ結合する方法を教えてください |
プラグイン
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ikemoto |
投稿日時: 2015/11/9 16:50
対応状況: −−−
|
一人前 登録日: 2015/10/2 居住地: 投稿: 79 |
プラグイン内で別プラグインのEntityとデータ結合する方法を教えてください お世話になります。
EC-CUBEそのものというより、クエリビルダの扱い方の質問なのですが 現在、プラグインとしてリリースされている メーカー管理プラグインにて生成されるテーブルを使って、 新規に作った別のプラグインからデータ抽出をしようとしています (商品検索拡張プラグイン的なものです)。 メーカー管理プラグイン側で 「plg_product_maker」というテーブルが生成され、 内部に product_id,maker_idを持ちます。 そして、 既存の商品マスタテーブル dtb_productのproduct_idフィールドと このprg_product_makerのproduct_idフィールドが left join の関係になっているのですが、 別につくったプラグインから、指定したmaker_idに属する商品リストを作るのが最終目的です。 そして、個別にデータを引っ張るのは 【dtb_product】 $qb = $app['orm.em']->createQueryBuilder() ->select("p.id,p.name") ->from("ECCUBE\\Entity\\Product", "p") ->where("p.id > 0") ->getQuery(); 【plg_product_maker】 $qb = $app['orm.em']->createQueryBuilder() ->select("pm.id,pm.maker_url") ->from("Plugin\\Maker\\Entity\\ProductMaker", "pm") ->where("pm.id > 0") ->getQuery(); …でできるな、というところまでは到達したのですが、 この2つをleftjoinするにはどうしたらいいの? というところで悩んでいます。 メーカー管理プラグインには ymlファイルにdtb_productとの関連付け(OneToOne定義?)がないので クエリビルダにleftjoinを追加する時に 結合式も追加する必要があると思うのですが… こういうパターンの時にどうしたらよいのかご存じでしたらご教示お願い致します。 |
tacky |
投稿日時: 2015/11/10 9:49
対応状況: −−−
|
長老 登録日: 2015/10/3 居住地: Tokyo 投稿: 277 |
Re: プラグイン内で別プラグインのEntityとデータ結合する方法を教えてください 今後プラグイン間の連動もありそうですよね。
実際試してないのであれですが、、、これでいけませんか?? $qb = $app['orm.em']->createQueryBuilder(); $qb->select('a') ->from('ECCUBE\\Entity\\Product', 'a') ->leftJoin('Plugin\\Maker\\Entity\\ProductMaker', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.id = b.id') $query = $qb->getQuery(); mekerのymlがいじれればymlファイルにProductを追記してあげればいけます。 |
ikemoto |
投稿日時: 2015/11/10 11:04
対応状況: −−−
|
一人前 登録日: 2015/10/2 居住地: 投稿: 79 |
Re: プラグイン内で別プラグインのEntityとデータ結合する方法を教えてください 有難うございます!
メーカーIDが1のものを取ってくる場合 $qb = $app['orm.em']->createQueryBuilder(); $qb->select('a.id,a.name,c.name') ->from('ECCUBE\\Entity\\Product', 'a') ->leftJoin('Plugin\\Maker\\Entity\\ProductMaker', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.id = b.id') ->leftJoin('Plugin\\Maker\\Entity\\Maker', 'c') ->where("c.id = :makere_id") ->setParameter("makere_id",1); $query = $qb->getQuery(); …でいけました。 'Plugin\\Maker\\Entity\\Maker' を追加しての結合は、ymlにOneToOneでJoinColumn定義があるから結合式不要…? 最初は頂いた回答に $mk_rep = $app['orm.em']->getRepository('Plugin\Maker\Entity\Maker'); $mk = $mk_rep->findOneby(array('id' => 1)); と、メーカーID=1で抽出したEntityオブジェクトを Where条件としてセットしようと思ったのですが… 上手く行かないので、これもJoinでくっつけてしまいました。 抽出条件の箇所に結果を絞り込んだEntityを入れるとかは できるのでしょうか? |
tacky |
投稿日時: 2015/11/10 11:43
対応状況: −−−
|
長老 登録日: 2015/10/3 居住地: Tokyo 投稿: 277 |
Re: プラグイン内で別プラグインのEntityとデータ結合する方法を教えてください 引用:
どこのEntityとJoinColumnしてるかにもよりますが、ymlに定義してあるのであれば、結合せずに、twigに$query渡してtwig上で取得出来るのではないかと思います。 引用:
これはちょっと出来るかわからないですね。。。 変数に全部入れちゃって、twigで必要なものを使う感じですかね。 |
ikemoto |
投稿日時: 2015/11/11 15:10
対応状況: −−−
|
一人前 登録日: 2015/10/2 居住地: 投稿: 79 |
Re: プラグイン内で別プラグインのEntityとデータ結合する方法を教えてください 引用:
…とのことでしたが、このプラグインは自作ではないので、 プラグインがアップデートされたら追記しても消えてしまう… と思ってどうしようかと迷ってました。 書込みだけ元のプラグインに任せて、 抽出用に自作プラグインの方に元のプラグインの Entity周りをコピーして自作プラグインとして切り離して カスタマイズすればいいか、ということで、 自作プラグイン側にコピーしてきてProductとの連携を追加しました。 で、自作プラグインPlugin\LclCustomにて、 $qb = $app['orm.em']->createQueryBuilder(); $qb->select('pm,mk,p') ->from('Plugin\\LclCustom\\Entity\\ProductMaker', 'pm') ->leftJoin('pm.Maker','mk') ->innerjoin('pm.Product','p') ->where('mk.id=1'); $query = $qb->getQuery(); …とすることでおかげさまで メーカーID=1のデータを取れるようになりました! で、ここから画面に表示するのはどうしたら…と思ったのですが 質問内容が変わってしまうので別途スレッドを作ります |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |