Symfony 2 & doctrine 2 - 在 doctrine query builder 中使用 jo


Symfony 2 & doctrine2 - how to use column name as array key when using join in doctrine query builder?

我的问题

我正在使用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_0kod_konta_1 等。

因为我的树枝模板如下所示:

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

并且作为SQL查询结果返回的id列被原则标记为id_0而不是id 我收到以下错误:

键"0, 1"的数组的键"id"在 中不存在 AppBundle::/raport/saldaKont.html.twig at line 18

我应该如何修改查询,以便它返回键一致的数组,没有任何后缀?

更新 1:实体代码

根据@Tiriel要求,请在下面找到我的实体代码。

Dziennik entity

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')之后(至少我是这样学习的,我的,它会解决你的问题)。

否则,我们需要查看您的实体。对我来说,您必须在每个表中都有一个列名 id,因此 Doctrine 必须在其查询中为每个表添加后缀。它在我的代码中从未出现过任何问题,但也许在这里......