Symfony 2 & amp; doctrine2 — как использовать имя столбца в качестве ключа массива при использовании соединения в построителе запросов doctrine?

Моя проблема

Я выполняю соединение, используя doctrine2 построитель запросов и symfony3,

Мой контроллер содержит следующий код:

$rp_konta = $this->getDoctrine()->getRepository('AppBundle:konto');
$query = $rp_konta->createQueryBuilder('p')
->select('p')
->addSelect('SUM(g.kwota)')
->leftJoin('p.ksiegowaniaWinien', 'g')
->getQuery();

что приводит к запросу SQL:

SELECT k0_.id AS id_0, k0_.kod_konta AS kod_konta_1, k0_.nazwa_konta AS nazwa_konta_2, k0_.typ_konta AS typ_konta_3, k0_.aktywne AS aktywne_4, SUM(d1_.kwota) AS sclr_5 FROM konto k0_ LEFT JOIN dziennik d1_ ON k0_.id = d1_.konto_winien_id AND (d1_.usuniety IS NULL) WHERE k0_.id IN ('1', '2', '3');

Обратите внимание, что за каждым именем столбца следует идентификатор суффикса_0 , kod_konta_1 и так далее.

Как шаблон моей ветки выглядит следующим образом:

{% for konto in konta_pagination %}
<tr>
<td>{{ konto.id }}</td>
{% endfor %}

а столбец id, возвращаемый в результате запроса SQL, помечается доктриной как id_0 а не как id Я получаю следующую ошибку:

Ключ «id» для массива с ключами «0, 1» не существует в
AppBundle :: / raport / saldaKont.html.twig в строке 18

Как мне изменить запрос, чтобы он возвращал массив с согласованными ключами без суффикса?

Обновление 1: код сущностей

На основании запроса @Tiriel, пожалуйста, найдите ниже также мой код сущностей.

Дзенник:

class dziennik
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/.../
/**
* @ORM\ManyToOne(targetEntity="konto", inversedBy="ksiegowaniaWinien")
* @Gedmo\Versioned
*/
protected $kontoWinien;

/**
* @ORM\ManyToOne(targetEntity="konto", inversedBy="ksiegowaniaMa")
* @Gedmo\Versioned
*/
protected $kontoMa;
}

Конто сущность:

class konto
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/.../

/**
* @ORM\OneToMany(targetEntity="dziennik", mappedBy="kontoWinien")
*/
protected $ksiegowaniaWinien;

/**
* @ORM\OneToMany(targetEntity="dziennik", mappedBy="kontoMa")
*/
protected $ksiegowaniaMa;

}

0

Решение

Попробуйте положить свой addSelect('SUM(g.kwota)') ПОСЛЕ вашего leftJoin('p.ksiegowaniaWinien', 'g') (по крайней мере, так я узнал, но это решит твою проблему).

В противном случае нам нужно увидеть ваши объекты. Для меня у вас должен быть идентификатор имени столбца в каждой таблице, и поэтому Doctrine должен суффиксировать каждый из них в своем запросе. Это никогда не создавало проблем в моем коде, но, возможно, здесь …

1

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

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

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