Я выполняю соединение, используя 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
Как мне изменить запрос, чтобы он возвращал массив с согласованными ключами без суффикса?
На основании запроса @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;
}
Попробуйте положить свой addSelect('SUM(g.kwota)')
ПОСЛЕ вашего leftJoin('p.ksiegowaniaWinien', 'g')
(по крайней мере, так я узнал, но это решит твою проблему).
В противном случае нам нужно увидеть ваши объекты. Для меня у вас должен быть идентификатор имени столбца в каждой таблице, и поэтому Doctrine должен суффиксировать каждый из них в своем запросе. Это никогда не создавало проблем в моем коде, но, возможно, здесь …
Других решений пока нет …