Symfony2/Doctrine2 从两个表中获取数据

Symfony2/Doctrine2 Get data from two tables

我有一个警报 Class,里面有一些数据。然后我有一个可用性 class。在我的可用性 class 我有

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

所以这是返回到我的警报 class 的外键,链接到我的警报 class id。

我现在正在处理可用性数据,所以我有 DQL 查询

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

我是这样称呼的

public function getAvailabilityData(){
        $alerts = $this->em->getRepository('NickAlertBundle:Alert')->getActiveAlertIds();

        if (!$alerts) {
            echo "No Availability";
        }

        foreach($alerts as $alert){
            $alertId = (int)$alert['id'];
            $allAvailability = $this->em->getRepository('NickAlertBundle:Availability')->getAlertAvailability($alertId);
        }
}

所以我基本上获取了所有活动的警报 ID,然后传递它以获取这些单独警报的可用性。

现在我有几个问题。

首先,在我进行的 DQL 查询中,我还需要从我的 Alert table(一个名为 command 的字段)中获取一些信息。我将如何加入这个查询来获取这条数据?

其次,对于返回的数据,我如何访问我的 Twig 文件中的 availabilityAlert?

更新 尝试加入

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

加载可用性实体时,Doctrine 将加载该实体作为代理(用于延迟加载)。

您可以通过正常的 getter / 属性 访问来访问它们,但它们通常会被 Doctrine 延迟加载。您可以通过 DQL 查询将它们连接起来,属性 将与所有已加载的链接实体混合,请参阅 Improving Performance with a Join

然后您可以在 Twig 中像访问任何其他实体一样访问这些关联实体 属性。