我有两个实体:
/**
* @ORMEntity
* @ORMTable(name="main")
*/
class Main
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORMManyToMany(targetEntity="Sub", mappedBy="mains")
* @ORMOrderBy({"position" = "ASC"})
*/
protected $subs;
/**
* @ORMColumn(type="string", length=255)
*/
protected $name;
}
/**
* @ORMEntity
* @ORMTable(name="sub")
*/
class Sub
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var DoctrineCommonCollectionsArrayCollection
*
* @ORMManyToMany(targetEntity="Main", inversedBy="subs")
* @ORMJoinTable(name="sub_main",
* joinColumns={
* @ORMJoinColumn(name="sub_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORMJoinColumn(name="main_id", referencedColumnName="id")
* }
* )
*/
protected $mains;
/**
* @ORMColumn(type="string", length=255)
*/
protected $name;
}
效果很好。在控制器中,我想获取所有具有子项(Sub(的 Mains 对象。
$em = $this->getDoctrine()->getManager();
$queryBuilder = $em->createQueryBuilder();
$qb->select('m, s')
->from('AppBundle:Main', 'm')
->where('ONLY MAINS WITH CHILDRENS (SUB)')
->leftJoin('m.subs', 's')
;
$mains = $qb->getQuery()->getResult();
那么在哪句子句中应该有什么条件呢?
我发现在简单的SQL中,我可以使用子查询或运算符存在,但是如何在Symfony 2的Doctrine中使用它呢?
您可以使用
->where('m.subs IS NOT EMPTY');