Symfony2 / Doctrine2了解查询结果

时间:2015-02-25 20:44:15

标签: php symfony

所以我有一张警报表。我还有一张可用性表。警报可以具有一个或多个可用性。这在我的可用性类中由

表示
/**
 * @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) 
    } 
} 

那究竟是什么告诉我的?我可以访问整个可用实体和Alert表的ID吗?如果是这种情况,为什么它允许我从Alert表中获取任何内容,例如

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

最后,在我上面查询的输出中,您可以看到元素0和1具有相同的ID。这意味着它们是相互关联的如果它们具有相同的ID,有没有办法将它们组合起来?

由于

1 个答案:

答案 0 :(得分:1)

alert 实体中,您有一个 availabilityAlert 对象(实际上,您有“多对一”关系);
换句话说,当您加载 alert 对象时,您将加载一个与其关联的 availabilityAlert 的数组。
这是默认情况下完成的,您不需要查询它
此外,如果您需要在数据库上执行咨询,您可以使用doctrine提供的一些“ fetchings ”,例如 find findAll ,< em> findBy 和 findOneBy http://goo.gl/Cvve1i)。
请注意,那些查找选项不接受加入,但对于您的示例,您不需要它。