2017-09-07 27 views
2

複数行の内部結合を使用したいと考えています。複数行の内部結合

テーブルとoneToMany関係を持つテーブルCompanyがあります。

class Company 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
    /** 
    * @ORM\ManyToMany(targetEntity="Market",cascade={"persist"}) 
    * @ORM\JoinTable(name="companys_markets", 
    *  joinColumns={@ORM\JoinColumn(name="company_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="market_id", referencedColumnName="id")} 
    *  ) 
    */ 
    private $markets; 

class Market 
{  
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(type="string",nullable=false,unique=true) 
    */ 

    private $name; 

これらの2つのクラスを設定すると、Doctrineは自動的に3つのテーブルを作成します。

そして、これらは以下のようなデータを設定します。Company AITに属し、Transに属します。この関係船がonetooneであれば、Comapny CItに属する、FinanceTransこの場合

Company Table 
id bane 
1 A 
2 B 
3 C 

companys_markets Table 
company_id sector_id 
1   1 
1   2 
2   3 
3   1 
3   2 

Sector Table 
Id name 
1 IT 
2 Trans 
3 Finance 

に属するCompany B、私は何がしたいことは、この、コンパやセクター

A 1 
A 2 
B 3 
C 1 
C 2 

のすべての組み合わせのようなものです私はinner joinのようにこれを得ることができました。しかし、この場合、c.marketsは複数であるため動作しません。

$this->em->createQuery(
     "SELECT c.name,c.code,m.name as marketName FROM UserBundle:Company c 
Inner join UserBundle:Market m with m.id = c.markets where c.enabled = true")->getResult() 

だから私はこれらの結果を得ることができますか?

+0

結果に何が問題なのですか? – Eric

+0

結果は理想的な結果です。私はこれをどうやって得るのか知りたいです。 @エリック – whitebear

答えて

0

私は私はあなたが言ってものをフォロー思いませんが、私はこれをしなかった提供されたデータから、ご希望の結果を得るために:

まず一時テーブルを作成します。

declare @Company Table (id int, bane varchar(1)) 
insert into @Company values 
(1,'A'), 
(2,'B'), 
(3,'C') 

declare @companys_markets Table (company_id int, sector_id int) 
insert into @companys_markets values 
(1,1), 
(1,2), 
(2,3), 
(3,1), 
(3,2) 

declare @Sector Table (Id int, name varchar(40)) 
insert into @Sector values 
(1, 'IT'), 
(2, 'Trans'), 
(3, 'Finance') 

は、このクエリを使用します。

A 1 
A 2 
B 3 
C 1 
C 2 
select 
c.bane,s.Id 
from @companys_markets cm 
inner join @Company c on cm.company_id = c.id 
inner join @Sector s on cm.sector_id = s.Id 

は、この結果を取得します。 210
関連する問題