Doctrine отправляет объект в новый конструктор DQL

У меня есть приложение блога в 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

Я пробовал много решений, и я нашел это

http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#new-operator-syntax

так что теперь мой 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 есть дюжина полей, и отправка их одно за другим кажется очень хакерской.

Есть ли способ отправить объект напрямую?

3

Решение

Как упомянуто @Cerad в комментариях, в настоящее время нет способа достичь этого, согласно документация, который по-прежнему актуален в 2017 году:

Обратите внимание, что вы можете передавать только скалярные выражения в конструктор.

Я не смог найти соответствующий запрос функции в трекер, так что, скорее всего, он не будет реализован в обозримом будущем.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]