Сохраняйте порядок выбранных полей с HYDRATE_ARRAY в Doctrine 1.2 - PullRequest
1 голос
/ 06 сентября 2011

Мой вопрос довольно прост, но мне не удается найти ответ.

Когда я выполняю запрос вроде:

$query->select('t2.name as t2_name, t1.name as t1_name')
->from('table1 t1')
->leftJoin('t1.table2 t2')
->execute(array(), Doctrine_Core::HYDRATE_ARRAY);

Doctrine возвращает мне массив, подобный:

array(
[0] => array(
't1_name' => 'foo',
't2_name' => 'bar'
)
)

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

В любом случае можно ли сохранить порядок этих выбранных полей в Doctrine?

1 Ответ

1 голос
/ 07 сентября 2011

Doctrine автоматически включит ключевое поле первичной (корневой) таблицы и автоматически сделает его первым столбцом в любом запросе почти во всех типах гидратации.

Поскольку table1 является корневой таблицей в вашем запросе, он перемещает ее в начало для своих внутренних преимуществ обработки.

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

Есть хороший пример создания гидратора ключа / значения , который я много раз использовал в нашем коде.

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

Также я разместил объяснение очень похожего вопроса здесь , что может быть полезным.

...