2010-05-10 3 views
2

Я пытаюсь использовать SQL-запрос для получения данных из моей базы данных в шаблон проекта symfony.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(); 

Но теперь, когда я пытаюсь Acces эти данные в шаблон, либо выполнив:

<?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" 

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

ответ

1

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

Привет, благодарю вас за ваш help, я не могу заставить его работать, хотя, если я попробую ваш foreach symfony по-прежнему бросает сообщение об ошибке: Неизвестное свойство записи/связанный компонент «Locatie» в «Locatie» В настоящее время у меня есть запрос в моем действии. – iggnition

+0

, если я удаляю первую строку и просто попробую вторую (organisatie), я действительно правильно показываю правильное имя, но я получаю уведомление/предупреждение: Примечание: попытка получить свойство не-объекта в // местоположении файла // – iggnition

+0

Я бы посоветовал переместить запрос к вашей модели Locatie и попытаться таким образом - используя вторую часть моего ответа. Дайте мне знать, если вам нужен пример :-) Кроме того, попробуйте var_dump() вывести объекты ($ obj), и вы увидите, как они структурированы. – richsage

0

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

+0

Благодарим вас за комментарий, это действительно помогло мне совершенно другой проблеме :) – iggnition

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