Symfony2/Doctrine2了解查询结果


Symfony2/Doctrine2 Understanding result of query

所以我有一个Alert表。我还有一张空房表。警报可以有一个或多个可用性。在我的可用性类中表示了这一点

/**
 * @var 'Nick'AlertBundle'Entity'Alert
 *
 * @ORM'ManyToOne(targetEntity="Nick'AlertBundle'Entity'Alert")
 * @ORM'JoinColumns({
 *   @ORM'JoinColumn(name="availability_alert_id", referencedColumnName="id")
 * })
 */
private $availabilityAlert;

所以availabilityAlert链接到我的Alert表中的id字段。所以我运行了一个查询,它基本上将这两个表连接在一起(或者我认为是这样)

public function getAlertAvailability()
{
    return $this->getEntityManager()
        ->createQuery(
            'SELECT a, u.id
                FROM NickAlertBundle:Availability a
                JOIN a.availabilityAlert u
                WHERE u.id = a.availabilityAlert
                ORDER BY a.classLetter, a.lastUpdated'
        )
        ->getResult();
}

现在,如果我输出结果,我基本上得到

array(3) { 
    [0]=> array(2) { 
        [0]=> string(37) "Nick'AlertBundle'Entity'Availability" 
        ["id"]=> int(5) 
    } 
    [1]=> array(2) { 
        [0]=> string(37) "Nick'AlertBundle'Entity'Availability" 
        ["id"]=> int(5) 
    } 
    [2]=> array(2) { 
        [0]=> string(37) "Nick'AlertBundle'Entity'Availability" 
        ["id"]=> int(6) 
    } 
} 

那么这到底告诉我什么呢?我有权访问整个可用性实体和警报表的id?如果是这种情况,为什么它允许我从警报表中获取任何信息,例如

'Doctrine'Common'Util'Debug::dump($allAvailability[0][0]->getAvailabilityAlert()->getAlertStatus());

最后,在我上面查询的输出中,您可以看到元素0和1具有相同的id。这意味着它们是链接的。如果他们有相同的id,有什么方法可以组合他们吗?

感谢

警报实体中,您有一个可用性警报object(实际上,您有"多对一"关系)
换句话说,当您加载警报对象时,您将加载一个具有与其关联的可用性警报是默认情况下完成的,您不需要查询它。

此外,如果您需要对数据库执行查询,您可以使用条令提供的一些"fetchings",如findfindAllfindByfindOneByhttp://goo.gl/Cvve1i
请注意,那些查找选项不接受联接,但对于您的示例,您不需要它。