Symfony получить данные из массива - PullRequest
2 голосов
/ 10 мая 2010

Я пытаюсь использовать запрос SQL для получения данных из моей базы данных в шаблон проекта Symfony.

мой запрос:

SQL:
SELECT l.loc_id AS l__loc_id, l.naam AS l__naam, l.straat AS l__straat, 
l.huisnummer AS l__huisnummer, l.plaats AS l__plaats, l.postcode AS l__postcode,
l.telefoon AS l__telefoon, l.opmerking AS l__opmerking, o.org_id AS o__org_id, o.naam AS o__naam 
FROM locatie l 
LEFT JOIN organisatie o 
ON l.org_id = o.org_id

Это генерируется этим DQL:

DQL:
 $this->q = Doctrine_Query::create()
->select('l.naam, o.naam, l.straat, l.huisnummer, l.plaats, l.postcode, l.telefoon, l.opmerking')
->from('Locatie l')
->leftJoin('l.Organisatie o')
->execute();

Но теперь, когда я пытаюсь получить доступ к этим данным в шаблоне, выполните одно из следующих действий:

<?php foreach ($q as $locatie): ?>
<?php echo $locatie['o.naam'] ?>

или

<?php foreach ($q as $locatie): ?>
<?php echo $locatie['o__naam'] ?>

я получаю ошибку от Symfony:

500 | Internal Server Error | Doctrine_Record_UnknownPropertyException
Unknown record property / related component "o__naam" on "Locatie"

Кто-нибудь знает, что здесь происходит не так? я не знаю, как вызвать значение из массива, если имена в обоих запросах не работают.

Ответы [ 2 ]

1 голос
/ 10 мая 2010

Doctrine объединит ваши результаты в объекты, соответствующие моделям в вашем запросе. В вашем случае это будут Locatie и Organisatie. Поэтому вы должны иметь доступ к данным следующим образом:

<?php foreach ($q as $obj): ?>
  <?php echo $obj->Locatie->naam; ?>
  <?php echo $obj->Organisatie->naam; ?>
<?php endforeach; ?>

Если у вас есть вышеуказанный метод, например, в классе таблицы Locatie, и вы используете self::create("l") для создания вашего метода, то объект, который вы используете в представлении, не будет нуждаться в ->Locatie части.

Редактировать : пример табличного метода:

class LocatieTable extends Doctrine_Table
{
  public function getLocaties()
  {
      $q = self::createQuery("l")
      ->select('l.naam, o.naam, l.straat, l.huisnummer, l.plaats, l.postcode, l.telefoon, l.opmerking')
      ->leftJoin('l.Organisatie o')
      ->execute();

      return $q;
  }      
}

Вы должны быть в состоянии найти этот класс (возможно, пустой) уже автоматически сгенерированный в lib/model/doctrine/LocatieTable.class.php. Теперь назовите это с:

$this->q = Doctrine::getTable("Locatie")->getLocaties();
0 голосов
/ 14 мая 2010

Если вы хотите узнать, как получить некоторое значение из результирующего объекта DoctrineRecord, я советую использовать метод var_dump ($ obj-> toArray ()), чтобы получить четкое представление о структуре объекта. После этого вы можете использовать несколько типов получателей, чтобы получить то, что вы хотите (например, $ obj-> A-> b, $ obj-> getA () -> getB () и т. Д.)

...