簡體   English   中英

Symfony 2和Doctrine2-在Doctrine查詢構建器中使用join時,如何使用列名作為數組鍵?

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

我的問題

我正在使用doctrine2查詢構建器和symfony3執行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等。

由於我的樹枝模板如下所示:

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

並且由於SQL查詢而返回的id列被該學說標記為id_0而不是id我得到以下錯誤:

第18行的AppBundle :: / raport / saldaKont.html.twig中不存在帶有鍵“ 0、1”的數組的鍵“ id”

我應該如何修改查詢,以便它返回鍵一致且沒有任何后綴的數組?

更新1:實體代碼

根據@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;

}

嘗試在您的leftJoin('p.ksiegowaniaWinien', 'g') addSelect('SUM(g.kwota)')之后放置addSelect('SUM(g.kwota)') (至少這是我學到的方法,除非它可以解決您的問題)。

否則,我們需要查看您的實體。 對我來說,每個表中都必須有一個列名ID,因此Doctrine必須在查詢中為每個表后綴。 它從未在我的代碼中造成任何問題,但也許在這里...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM