DQL连接来自不同表格的两个连接表格

问题描述:

我知道标题不是很清楚,但我会尽力在这里更好地解释我的问题。 我有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 

您将需要多对多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

这正是我正在寻找的!非常感谢 :) –