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 A
IT
に属し、Trans
に属します。この関係船がonetooneであれば、Comapny C
はIt
に属する、Finance
へTrans
この場合
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()
だから私はこれらの結果を得ることができますか?
結果に何が問題なのですか? – Eric
結果は理想的な結果です。私はこれをどうやって得るのか知りたいです。 @エリック – whitebear