2017-05-24 230 views
1

我知道標題不是很清楚,但我會盡力在這裏更好地解釋我的問題。 我有3個主義實體:A,B和CDQL連接來自不同表格的兩個連接表格

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級上使用JOIN和B實體,通過這個DQL查詢:

$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

這正是我正在尋找的!非常感謝 :) –