2015-02-24 3 views
1

У меня есть класс Alert с некоторыми данными в нем. Тогда у меня есть класс доступности. В моем классе Наличия у меня естьSymfony2/Doctrine2 Получить данные из двух таблиц

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

Так это внешний ключ к моему оповещению класса, связанному с моим Оповещением идентификатора класса.

Я сейчас делаю некоторые работы по данным доступности, поэтому у меня есть 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); 
     } 
} 

Так что я в основном получить все мое активное Идентификаторы предупреждений, а затем передайте это, чтобы получить мою доступность для этих индивидуальных предупреждений.

Теперь у меня есть пара проблем.

Во-первых, в запросе DQL, который я делаю, мне нужно также получить что-то из моей таблицы предупреждений (поле, называемое командой). Как я могу присоединиться к этому запросу, чтобы получить эту часть данных?

Во-вторых, с данными, которые возвращаются, как мне получить доступ к доступности? В моем файле Twig?

UPDATE Попытка присоединиться

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(); 
} 

ответ

2

Доктрина загрузит эту сущность в качестве прокси-сервера (для отложенной загрузки) при наличии объект загружается.

Вы можете получить к ним доступ через обычный доступ к getter/property, но обычно они будут ленивы загружаться с помощью Doctrine. Вы можете подключить их через DQL-запрос, и свойство будет увлажнено со всеми уже связанными объектами, см. Improving Performance with a Join.

Затем вы можете получить доступ к этим связанным объектам в Twig как к любому другому свойству.

+0

Что я не понимаю, я использую левое соединение? И к чему я должен присоединиться? –

+0

Вместо того, чтобы загружать идентификаторы оповещений, затем загружая объекты «Доступность», попробуйте добавить метод в репозиторий для «Доступности», который загружает объект с помощью 'Alert', уже подключенного с условиями, которые вам нужны (через DQL-метод, с которым я связан), тогда вы можете получать предупреждения от объекта через getter ('getAlerts' или что-то еще), как обычно. – AlpineCoder

+0

Я обновил вопрос с жалкой попыткой, которую я сделал. Предполагается, что a - доступность, а u - для таблицы предупреждений. Я думаю, что мне нужно сделать, это присоединиться к доступности доступности. Добавить в поле «Оповещения», просто пытаясь понять, как –

Смежные вопросы