предложение symfony GetTable where в качестве объекта

#php #symfony1 #doctrine

#php #symfony1 #доктрина

Вопрос:

В моей таблице используется модуль перевода

 // This works fine for 1 item
$o = Doctrine_Core::getTable('myTable')->find(1);
echo $o->getName();
  

Я хочу иметь возможность запускать запрос и правильно получать все строки с именем (которое находится в таблице перевода)

 $o = Doctring_Core::getTable('myTable').createQuery('a')
   ->leftJoin('a.Translation t')
   ->andWhere('a.visible = ?', true)
   ->andWhere('t.lang = ?', 'en')
   ->execute();
  

Я хочу иметь возможность делать

 foreach($o as $item) {
  echo $item->getName();
}
  

Но мой getName() всегда равен null…

Ответ №1:

Вам нужно использовать $item->Translation->name , или, альтернативно, вы можете создать аналогичную прокси-функцию:

 //lib/model/doctrine/myTable.class.php
function getName() {
  return $this->Translation->name;
}
  

Эта функция может быть вызвана явно, как $item->getName() , или неявно через __get() as $item->name ;

Я предполагаю, что вы используете поведение doctrine для хранения переводов — никогда не использовали его, поэтому ваш пробег может отличаться.

Комментарии:

1. Хорошо, правильная вещь, которую нужно сделать, это вообще не выполнять leftJoin, потому что перевод обрабатывается автоматически. Спасибо за ваш ответ.