バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

 > プラグイン > プラグイン内で別プラグインの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とデータ結合する方法を教えてください
引用:

'Plugin\\Maker\\Entity\\Maker' を追加しての結合は、ymlにOneToOneでJoinColumn定義があるから結合式不要…?

どこのEntityとJoinColumnしてるかにもよりますが、ymlに定義してあるのであれば、結合せずに、twigに$query渡してtwig上で取得出来るのではないかと思います。


引用:

抽出条件の箇所に結果を絞り込んだEntityを入れるとかは
できるのでしょうか?

これはちょっと出来るかわからないですね。。。
変数に全部入れちゃって、twigで必要なものを使う感じですかね。
ikemoto
投稿日時: 2015/11/11 15:10
対応状況: −−−
一人前
登録日: 2015/10/2
居住地:
投稿: 79
Re: プラグイン内で別プラグインのEntityとデータ結合する方法を教えてください
引用:

mekerのymlがいじれればymlファイルにProductを追記してあげればいけます。


…とのことでしたが、このプラグインは自作ではないので、
プラグインがアップデートされたら追記しても消えてしまう…
と思ってどうしようかと迷ってました。

書込みだけ元のプラグインに任せて、
抽出用に自作プラグインの方に元のプラグインの
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のデータを取れるようになりました!
で、ここから画面に表示するのはどうしたら…と思ったのですが
質問内容が変わってしまうので別途スレッドを作ります
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は89,281名です
総投稿数は110,071件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1652
8
red
1570
9
mcontact
1301
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.