Отображение атрибутов данных из объединенного запроса в twig

Я новичок в Symfony2 и Doctrine, но немного программировал на PHP. У меня есть две таблицы:

Quotes:
id
quote
subject
auth_id

а также

QuoteAuthor:
id
authorFirstName
authorLastName
authorLastNameFirstLetter
slug

Я запускаю запрос:

"SELECT u, a FROM BetterLifeQuotesBundle:Quote u u.auth_id a WHERE a.id = 4"

В этом конкретном запросе результат имеет только одну строку (у этого автора есть только одна цитата). Запрос делается с помощью WhiteOctober pagerfanta для удобной разбивки на страницы. Я передаю результат в ветку и отображаю кавычки

{% for data in pagerfanta.currentPageResults %}
    <li>{{ data.quote }}</li>
{% endfor %}

В этом случае будет отображаться атрибут data.quote.

Вопрос: Как отобразить атрибуты данных из объединенной таблицы QuoteAuthor? то есть authFirstName, authLastName и т. д.

Я искал в Интернете, и я не могу найти никакого ответа. Кстати, если в приведенном выше операторе Twig я заменю data.quote на data[‘quote’], он выдаст ошибку, что «Ключ 'quote' в объекте (с ArrayAccess) типа не существует».

Вся информация, которая мне нужна, находится в этом data, как вы можете видеть в информации о дампе ниже:

object(BetterLife\QuotesBundle\Entity\Quote)[760]
  private 'id' => int 500
  private 'quote' => string 'An archaeologist is the best husband a woman can have; the   
                       older she gets, the more interested he is in her.' (length=108)
  private 'subject' => string 'Men and Women' (length=13)
  private 'auth_id' => 
    object(BetterLife\QuotesBundle\Entity\QuoteAuthor)[758]
      private 'id' => int 4
      private 'authorFirstName' => string 'Agatha' (length=6)
      private 'authorLastName' => string 'Christie' (length=8)
      private 'authorLastNameFirstLetter' => string 'C' (length=1)
      private 'slug' => string '' (length=0)
      private 'quotes' => 
        object(Doctrine\ORM\PersistentCollection)[753]
          private 'snapshot' => 
            array (size=0)
              ...
          private 'owner' => 
            &object(BetterLife\QuotesBundle\Entity\QuoteAuthor)[758]
          private 'association' => 
            array (size=15)
              ...
          private 'em' => 
            object(Doctrine\ORM\EntityManager)[345]
              ...
          private 'backRefFieldName' => string 'quote_author' (length=12)
          private 'typeClass' => 
            object(Doctrine\ORM\Mapping\ClassMetadata)[816]
              ...
          private 'isDirty' => boolean false
          private 'initialized' => boolean false
          private 'coll' => 
            object(Doctrine\Common\Collections\ArrayCollection)[769]
          ...

person Gilgamesh    schedule 16.01.2013    source источник
comment
Я понимаю, что вы пытаетесь сказать, но я рекомендую сделать ваш фактический вопрос немного ярче. Ваш вопрос о том, как отобразить атрибуты данных из объединенных...», находится прямо в середине сообщения хорошего размера. Выделив его, будет легче ответить   -  person demongolem    schedule 17.01.2013
comment
Спасибо за вашу подсказку, и теперь я исправил фактический вопрос.   -  person Gilgamesh    schedule 17.01.2013
comment
Я считаю, что data.quote должно работать. Однако ваш атрибут quote является закрытым, так что у вас есть метод getQuote() в вашей сущности?   -  person lifo    schedule 17.01.2013
comment
Спасибо за ваш ответ. Я забыл упомянуть, что у меня нет проблем с отображением data.quote или data.subject. У меня проблема с отображением data.authorFirstName (например) из объединенной таблицы - QuoteAuthor.   -  person Gilgamesh    schedule 19.01.2013


Ответы (1)


Чтобы это работало, вам понадобится метод getAuthor() в вашем классе Quote (который возвращает значение auth_id) и метод getFirstName() в вашем классе QuoteAuthor (который возвращает значение authorFirstName).

Затем вы сможете получить имя автора, используя {{ data.author.firstName }}.

Я бы предложил переименовать свойство auth_id в author, чтобы связь между Quote и Author было легче понять.

person StuBez    schedule 13.03.2013