查询参考文档 ODM 原则2.


Query reference documents ODM Doctrine2

我有两个文档CarDriver

/**
* @ODM'Document(collection="cars")
*/
class Car { 
    /**
     * @ODM'Id
     */
    protected $id;
    /**
     * @ODM'ReferenceOne(targetDocument="Driver")
     */
    protected $driver;
    //...
}
/**
* @ODM'Document(collection="drivers")
*/
class Driver { 
    /**
     * @ODM'Id
     */
    protected $id;
    /**
     * @ODM'String
     * @Assert'NotBlank()
     */
    protected $name;
    //...
}

我想要一辆由"彼得"驾驶的汽车

$car = $dm
  ->getRepository('Car')
  ->createQueryBuilder()
  ->field('driver.name')->equals("Peter")
  ->getQuery()->getSingleResult();

但是即使数据库中存在CarDriver,前面的代码也会返回NULL

发现了一个类似的问题,我想知道这个缺点是否可以通过其他方式解决

试试这个

$car = $dm
->getRepository('Car')
->createQueryBuilder()
->where('driver.name =?1')
->setParameter(1, 'Peter')
->getQuery()->getSingleResult();

编辑:

如果司机彼得有不止一辆车,你应该使用 ->getOneOrNullResult()而不是getSingleResult()