У меня есть приложение блога в Symfony2 с Doctrine, состоящее из трех сущностей
пользователь
один пост может иметь много комментариев
это приложение имеет вызов API json «/ me / comments»
Я хотел бы это вернуть
[
{
'text': 'great post',
... 10 other field a comment can have ...
'post': { 'id': 3}
},
{
'text': 'i dont like it',
... 10 other field a comment can have ...
'post': {'id': 4}
},
]
Обычная функция doctrine возвращает мне все отношения (User, Post) в json, которые я не хочу, так как Post может содержать огромный текст, поэтому меня интересует только Id
Я пробовал много решений, и я нашел это
так что теперь мой DQL-запрос выглядит так
SELECT NEW CommentDTO(c) FROM Comment as c WHERE c.author = :user
конструктор CommentDTO выглядит так
__construct(Comment c) {
$this->text = c.getText();
$this->post = [ 'id' => c.getPost().getId() ];
}
когда я выполню это, я получил
{
"code":500,
"message":"Argument 1 passed to MVMS\\ApiBundle\\Entity\\CommentDTO::__construct() must be an instance of MVMS\\ApiBundle\\En
tity\\Comment, integer given"
}
Конечно, я мог бы дать параметр один за другим, но у Comment есть дюжина полей, и отправка их одно за другим кажется очень хакерской.
Есть ли способ отправить объект напрямую?
Как упомянуто @Cerad в комментариях, в настоящее время нет способа достичь этого, согласно документация, который по-прежнему актуален в 2017 году:
Обратите внимание, что вы можете передавать только скалярные выражения в конструктор.
Я не смог найти соответствующий запрос функции в трекер, так что, скорее всего, он не будет реализован в обозримом будущем.
Других решений пока нет …