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
]
Другие вопросы по тегам