我正在使用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');
请注意,每个列名称后跟后缀ID _0 ,kod_konta _1 ,依此类推。
由于我的twig模板如下所示:
{% for konto in konta_pagination %}
<tr>
<td>{{ konto.id }}</td>
{% endfor %}
并且作为SQL查询返回的id列被doctrine标记为id_0
而不是id
我收到以下错误:
具有键“0,1”的数组的键“id”不存在 AppBundle :: / raport / saldaKont.html.twig第18行
我应该如何修改查询,使其返回具有一致且没有任何后缀的键的数组?
根据@Tiriel请求,请在下面找到我的实体代码。
Dziennik实体:
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;
}
Konto实体:
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 :(得分:1)
尝试将addSelect('SUM(g.kwota)')
放在leftJoin('p.ksiegowaniaWinien', 'g')
之后(至少这是我学到的方式,mybe它可以解决你的问题)。
否则,我们需要查看您的实体。对我来说,每个表中必须有一个列名id,因此Doctrine必须在其查询中为每个后缀添加一个后缀。它在我的代码中从未出现任何问题,但也许在这里...