2017-05-24 30 views
1

タイトルはあまり明確ではありませんが、ここで私の問題をより詳しく説明しようとします。 私は3つのDoctrineのエンティティ持っている:A、BおよびCDQLは異なるテーブルの2つの結合テーブルを結合します

class A {  class B {   class C { 
    $id;    $id;     $id; 
    ManyToMany  ManyToMany   } 
    $C;    $C; 
}    } 

私は、オブジェクトAとオブジェクトBは多くに少なくとも一つの同じC.

多くを持っているかどうかを知るしようとしているが

table AC {   table BC { 
    A_id;    B_id; 
    C_id;    C_id; 
}     } 

私はこれらのDQL内のテーブルが、私はSQLで行うことができますやりたいを使用することはできませんことを知っている:関係は次のように私のテーブルを提供します。それは与えるだろう:

SELECT COUNT(A.id) FROM AC INNER JOIN BC 
ON AC.C_id = BC.C_id 
WHERE BC.B_id=1217 AND AC.A_id=185 

答えて

1

をエンティティは次のようになりますので、あなたは、多くのaccosiation双方向に多くを行う必要があります。

<?php 

namespace App\Model; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
*/ 
class A 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    * @var integer 
    */ 
    private $id; 

    /** 
    * @var ArrayCollection|C[] 
    * @ORM\ManyToMany(targetEntity="C", inversedBy="as") 
    */ 
    private $cs; 
} 

/** 
* @ORM\Entity 
*/ 
class B 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    * @var integer 
    */ 
    private $id; 

    /** 
    * @var ArrayCollection|C[] 
    * @ORM\ManyToMany(targetEntity="C", inversedBy="bs") 
    */ 
    private $cs; 
} 

/** 
* @ORM\Entity 
*/ 
class C 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    * @var integer 
    */ 
    private $id; 

    /** 
    * @var ArrayCollection|A[] 
    * @ORM\ManyToMany(targetEntity="A", mappedBy="cs") 
    */ 
    private $as; 

    /** 
    * @var ArrayCollection|A[] 
    * @ORM\ManyToMany(targetEntity="B", mappedBy="cs") 
    */ 
    private $bs; 

} 

そして、あなたは条件付きでCクラスを照会することができますに参加しますこのDQLクエリによって、Bエンティティ:

$query = $this->entityManager->createQuery("SELECT count(c.id) FROM C::class c INNER JOIN c.as a WITH a.id = :a_id INNER JOIN c.bs b WITH b.id = :b_id") 
     ->setParameter('a_id', 185) 
     ->setParameter('b_id', 1217); 
    $result = $query->getSingleScalarResult(); 
+0

これは私が探していたものです!どうもありがとうございます :) –

関連する問題