В настоящее время я сталкиваюсь с некоторыми проблемами с утилизацией учения. Я использую ZF2 для создания API, и поэтому мне нужно собрать некоторые запросы, которые используют объединения.Доктрина Гидрат присоединился к объектам в одну запись массива
Сейчас они выглядят примерно так:
$qb->select(array('r, a'))
->from('Release\Entity\Release', 'r')
->leftJoin(
'Artist\Entity\Artist', a',
\Doctrine\ORM\Query\Expr\Join::WITH, 'a.id = r.artist'
)
->orderBy('r.id', 'ASC');
Так что, если я увлажняю результат с AbstractQuery::HYDRATE_ARRAY
результатом будет дополнительным элементом массива для каждой присоединяемой таблицы/сущности.
Array
(
[0] => Array
(
[id] => 1
[artist] => 1
[title] => A super nice Release
[digital_release] => DateTime Object
(
[date] => 2014-01-25 00:00:00.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
[physical_release] => DateTime Object
(
[date] => 2014-01-25 00:00:00.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
)
[1] => Array
(
[id] => 1
[first_name] => John
[last_name] => Doe
[artist_name] => JD and the Beat-Machines
[created_at] => DateTime Object
(
[date] => 2015-04-17 13:16:18.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
[updated_at] => DateTime Object
(
[date] => 2015-04-17 13:16:18.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
)
[2] => Array
(
[id] => 2
[artist] => 14
[title] => Some other nice album
[digital_release] => DateTime Object
(
[date] => 2014-02-01 00:00:00.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
[physical_release] => DateTime Object
(
[date] => 2014-02-01 00:00:00.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
)
[...]
)
Как вы можете видеть художника соответствующего выпуска [0] хранится в массиве ключа [1].
Если я окончательно распечатаю результат как новый JsonModel($result)
, это не представляется мне возможным.
Что я хочу достичь, это какой-то результат, как этот
Array
(
[0] => Array
(
[id] => 1
[artist] => Array
(
[id] => 1
[first_name] => John
[last_name] => Doe
[artist_name] => JD and the Beat-Machines
[created_at] => DateTime Object
(
[date] => 2015-04-17 13:16:18.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
[updated_at] => DateTime Object
(
[date] => 2015-04-17 13:16:18.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
)
[title] => A super nice Release
[digital_release] => DateTime Object
(
[date] => 2014-01-25 00:00:00.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
[physical_release] => DateTime Object
(
[date] => 2014-01-25 00:00:00.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
)
[2] => Array
(
[id] => 2
[artist] => Array
(
[id] => 14
[...]
)
[title] => Some other nice album
[digital_release] => DateTime Object
(
[date] => 2014-02-01 00:00:00.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
[physical_release] => DateTime Object
(
[date] => 2014-02-01 00:00:00.000000
[timezone_type] => 3
[timezone] => Europe/Berlin
)
)
[...]
)
Может быть, кто-то полезный совет, как получить такой выход :)
Я уже пытался использовать AbstractQuery::HYDRATE_SCALAR
, который приходит немного ближе к тому, что я хочу, но результат объединенной таблицы не является подматрицей объединенного столбца.
Заранее спасибо за каждый полезный намек :)
С уважением
Эй Hooli, спасибо за полезный комментарий по этому вопросу! Итак, ваш пример сопоставления работает хорошо, но в действии - когда я делаю новый экземпляр выпуска - я действительно не знаю, как заполнить объект Entity-Object моими данными. Я имею в виду: новый Release означает один элемент, но мой запрос строит список всех элементов в запросе. поэтому я получил свой запрос $, который содержит результат всего моего запроса (который выполняется с QueryBuilder), а с другой стороны, у меня есть этот хороший, но пустой объект-объект ... Возможно, немой вопрос, но: Как сделать вы объединяете эти две вещи? – bquarta
@bquarta i отредактировал мое сообщение – Hooli
Извините за поздний ответ: Я попробовал, и он работает для самого объекта. Но я не могу передать объект как jsonModel, так как свойства объекта защищены, а json для них будет пустым. Если этот последний шаг будет работать, тогда все будет хорошо. – bquarta