2012-02-02 5 views
0

У меня есть объект под названием Слово, и он имеет два ряда:Ошибка печати идентификатора внешнего ключа. Symfony2 Учение

id comment_id foo_id text 
2  1   1  Jajajaja :) Hola. 
3  2   1  Chao 

foo_id и comment_id являются внешние ключи и целые значения. Foo_id из таблицы Foo и comment_id из таблицы Комментарии.

Я пытаюсь напечатать comment_id и foo_id в шаблоне ветки.

{% for k in keywords %} 
    {{ k.id}} , {{ k.text}}, {{ k.comment }}, {{ k.foo}} 
{% else %} 

, но это дает мне эту ошибку:

An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Object of class 
Proxies\PruebasRBundleEntityCommentsProxy could not be 
converted to string in  C:\wamp\www\sym\app\cache\dev\twig\52\c9\3138bf2dc905760b186f2d006484.php 
line 74") in PruebasRBundle:Default:keywords.html.twig at line 24. 

Итак, я попробовал печать значения, которые не являются иностранные ключи

Я пытаюсь напечатать comment_id и foo_id в шаблоне прута ,

{% for k in keywords %} 
    {{ k.id}} , {{ k.text}} <!--No k.comment no k.foo --> 
{% else %} 

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

Это заставляет меня думать, что есть что-то с отношениями :(

ответ

2

Это потому, что доктрина автоматически обнаруживает k.comment forei gn, и возвращает объект , представляющий внешнюю строку комментария.

Этот объект является экземпляром PruebasRBundle \ Entity \ Comments. (Doctrine2 обернет его в прокси, чтобы облегчить ленивую загрузку).

Ваша проблема заключается в том, что вы пытаетесь использовать этот объект в качестве строки .

Etiher изменить свой прутик, как это:

{% for k in keywords %} 
    {{ k.id}} , {{ k.text}}, {{ k.comment.id }}, {{ k.foo}} 
{% else %} 

Или реализовать метод __toString в вашем Comment классе.

+0

О, спасибо! Я не знал, что вы говорите. Не прочитал это ни в одной документации. Вы знаете, как напечатать такую ​​переменную, как этот k.comment.id, но в шаблоне php? ;) –

+1

$ k-> getComment() -> getId() – Florian

0

Если вы хотите печатать числовые значения попробовать этот способ:

{% for k in keywords %} 
    {{ k.id}} , {{ k.text}}, {{ k.comment_id }}, {{ k.foo_id}} 
{% else %} 

Если вы хотите напечатать некоторое значение из связанных объектов попробуйте создать magic method __toString() для сущностей Foo и комментарии. Тогда:

{% for k in keywords %} 
    {{ k.id}} , {{ k.text}}, {{ k.comments }}, {{ k.foo}} 
{% else %} 
+0

Я пробовал оба решения, и он не работает. Кроме того, когда я запрашиваю все записи следующим образом: $ keywords = $ this-> getDoctrine() -> getRepository ('PruebasRBundle: Keywords') -> findAll(); он находит все элементы. Но когда я нахожу Id, он говорит «Нет записей» ... и я уверен, что Id существует. –

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