Doctrine DBAL - SELECT объединяет две таблицы с префиксом в ключах результата
В настоящее время я использую doctrine dbal для запросов к базе данных. Я также использую построитель запросов. И мне было интересно, как я мог выбрать две таблицы и получить результаты в массиве, который имеет префиксные имена ключей для одной из объединенных таблиц.
Вот пример желаемого результата:
$data = [
key1 => 'value1',
key2 => 'value2',
key3 => 'value3',
key4 => 'value4',
table2.key1 => 'value1',
table2.key2 => 'value2',
table2.key3 => 'value3',
]
Спасибо
1 ответ
Решение
Я только что столкнулся с той же проблемой, и я решил ее следующим образом:
$result = $this->createQueryBuilder('comments')
->select([
'comments.id as id',
'comments.post_id as postId',
'comments.userId as userId',
'comments.userName as userName',
'comments.userEmail as userEmail',
'comments.parentId as parentId',
'comments.postedAt as postedAt',
'comments.status as status',
'comments.comment as comment',
'user.fullname as user_userName',
'user.email as user_email',
])
->leftJoin(
'Entity\User', 'user',
Query\Expr\Join::WITH,
'comments.userId = user.id'
)
->where('comments.post_id=:postId')->setParameter('postId', $postId)
->getQuery()
->getResult(Query::HYDRATE_ARRAY)
;
Итак, чтобы добавить префиксы к табличным данным, просто объявите их в операторе "select" как
table.var1 as prefix_var1, table.var2 as prefix_var2
и результат будет
[
prefix_var1 => value,
prefix_var2 => value,
]
еще одна вещь, которую вы можете сделать, когда вы объявляете select as:
table1, table2.var1 as prefix_var1, table2.var2 as prefix_var2
вы получите следующий результат
[
0 => [ // it's come from table1
var1 => value,
var2 => value,
],
prefix_var1 => value, // it's come from table2
prefix_var2 => value, // it's come from table2
]