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



我有一个Alert类,其中包含一些数据。然后我有了一个Availability类。在我的可用性课程中,我有

/**
 * @var NickAlertBundleEntityAlert
 *
 * @ORMManyToOne(targetEntity="NickAlertBundleEntityAlert")
 * @ORMJoinColumns({
 *   @ORMJoinColumn(name="availability_alert_id", referencedColumnName="id")
 * })
 */
private $availabilityAlert;

所以这是我的Alert类的外键,链接到我的Alerts类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表(一个名为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将在加载Availability实体时将该实体作为代理加载(用于延迟加载)。

您可以通过普通的getter/property访问来访问这些,但它们通常会被Doctrine延迟加载。您可以通过DQL查询将它们联接,并且该属性将与已加载的所有链接实体一起水合,请参见使用联接提高性能。

然后,您可以将Twig中的这些关联实体作为任何其他属性进行访问。

相关内容

  • 没有找到相关文章

最新更新