doctrine queryBuilder returns 错误(树枝?)并且不显示一对多关系的数据,但我的 qquery returns 给我带来了好的结果

doctrine queryBuilder returns error (twig?) and don't display datas for a One-To-Many relation, but my qquery returns me the good results

我的 symfony 项目中有这些实体:

Compteurs.php

class Compteurs
{
    /**
     * @var \PointsComptage
     *
     * @ORM\ManyToOne(targetEntity="PointsComptage", inversedBy="compteurs")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="pointscomptage_id", referencedColumnName="id")
     * })
     */
    private $pointsComptage;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\OneToMany(targetEntity="ParametresMesure", mappedBy="compteurs")
     */
    private $parametresMesure;

ParametresMesure.php:

class ParametresMesure
{
    /**
     * @var Compteurs
     *
     * @ORM\ManyToOne(targetEntity="Compteurs", inversedBy="parametresMesure")
     * @ORM\JoinColumn(name="compteurs_id", referencedColumnName="id")
     */
    private $compteurs;

PointsComptage.php

class PointsComptage
{
    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\OneToMany(targetEntity="Compteurs", mappedBy="pointsComptage")
     */
    private $compteurs;

在我的树枝视图中,我试图通过 PointsComptage.php.

恢复所有 Compteurs.php 数据

我有一个详情页面参数中有pointComptage.id .在此详细信息页面中,我想显示所有 Compteurs.php 属于 PointComptage selected,以及所有 ParametresMesure.php 链接到 Compteursselected pointComptage.

这是我用于此方法的控制器:

public function detailsPointsComptageAction($id)
  {
    $em=$this->getDoctrine()->getManager();

    $arrayPC = $this->getDoctrine()
                   ->getRepository('MySpaceMyBundle:PointsComptage')
                   ->findOneById($id); //pointComptage.id selected

      $arrayCompteur = $this->getDoctrine()
                   ->getRepository('MySpaceMyBundle:Compteurs')
                   ->getCompteursAttributesByPointsComptage($id); //method for recover datas linked to the compteurs belong to the  selectedpointComptage

      var_dump($arrayCompteur);

      return $this->render('MySpaceMyBundle:MyFolder:details.html.twig', array( 'arrayPC' => $arrayPC, 'arrayCompteur' => $arrayCompteur));
  }

现在,这是我的 PointsComptageRepository,用于创建我需要恢复所有数据的 dql queryBuilder:

public function getCompteursAttributesByPointsComptage($id)
  {
    $queryBuilder = $this->_em->createQueryBuilder();

    $queryBuilder
      ->select('pc')
      ->addSelect('c')
      ->from('MySpaceMyBundle:Compteurs', 'c')
      ->join('c.pointsComptage', 'pc')
      ->addSelect('pm')
      ->join('c.parametresMesure', 'pm')
      ->addSelect('tu')
      ->where('c.pointsComptage = pc.id')
      ->andWhere('pm.compteurs = c.id')
      ->andWhere('c.pointsComptage = :id')
      ->setParameter('id', $id);

      return $queryBuilder->getQuery()
                          ->getScalarResult();
  }

这是我的树枝视图:

{% for compteur in arrayCompteur %}
  <tr>
    <td>{{ compteur.matriculeCompteur}}</td> <!-- data 1 -->
    <td>{{ compteur.miseEnService|date("Y-m-d", "Europe/Paris")}}</td> <!-- data 2 -->
    <td>{{ compteur.miseHorsService|date("Y-m-d", "Europe/Paris")}}</td> <!-- data 3 -->
    <td class="no-cell-padding">
      <table class="inner-table table stripe row-border order-column display table-bordered table-hover compact" cellspacing="0" width="100%">
        {# {% for compteur in arrayCompteurs.parametresMesure %} #}
          <tr>
            <td>test</td>
            <td>test</td>
            <td>test</td>
            <td>test</td>
          </tr>
        {# {% endfor %} #}
      </table>
    </td>
  </tr>
{% endfor %}

如您所见,我对 $arrayCompteur 进行了 var 转储,其中 returns 我是这样的:

array (size=3)
  0 => 
    array (size=16)
      'c_id' => int 5
      'c_matriculeCompteur' => string 'egfizegilf88' (length=12)
      'c_miseEnService' => 
        object(DateTime)[2255]
          public 'date' => string '2012-05-15 00:00:00' (length=19)
          public 'timezone_type' => int 3
          public 'timezone' => string 'Europe/Paris' (length=12)
      'c_miseHorsService' => 
        object(DateTime)[2254]
          public 'date' => string '2015-06-19 00:00:00' (length=19)
          public 'timezone_type' => int 3
          public 'timezone' => string 'Europe/Paris' (length=12)
      'pc_id' => int 1
      'pc_invariantPointComptage' => string 'invariant 1' (length=11)
      'pc_nomPointComptage' => string 'test 1' (length=6)
      'pc_codeDistribution' => string 'code test 1' (length=11)
      'pc_localisationPointComptage' => string 'local test 1' (length=12)
      'pm_id' => int 1
      'pm_codeParametre' => string '658' (length=3)
      'pm_nomParametre' => string 'test 658' (length=8)
      'tu_id' => int 1
      'tu_nomTypeUnite' => string 'kW' (length=2)
      'tp_id' => int 1
      'tp_nomTypeParametre' => string 'puissance' (length=9)
  1 => 
    array (size=16)
      'c_id' => int 5
      'c_matriculeCompteur' => string 'egfizegilf88' (length=12)
      'c_miseEnService' => 
        object(DateTime)[2249]
          public 'date' => string '2012-05-15 00:00:00' (length=19)
          public 'timezone_type' => int 3
          public 'timezone' => string 'Europe/Paris' (length=12)
      'c_miseHorsService' => 
        object(DateTime)[2360]
          public 'date' => string '2015-06-19 00:00:00' (length=19)
          public 'timezone_type' => int 3
          public 'timezone' => string 'Europe/Paris' (length=12)
      'pc_id' => int 1
      'pc_invariantPointComptage' => string 'invariant 1' (length=11)
      'pc_nomPointComptage' => string 'test 1' (length=6)
      'pc_codeDistribution' => string 'code test 1' (length=11)
      'pc_localisationPointComptage' => string 'local test 1' (length=12)
      'pm_id' => int 3
      'pm_codeParametre' => string 'gjgfjgfj489489' (length=14)
      'pm_nomParametre' => string 'hyhfhfhfhf' (length=10)
      'tu_id' => int 2
      'tu_nomTypeUnite' => string 'kWh' (length=3)
      'tp_id' => int 2
      'tp_nomTypeParametre' => string 'énergie' (length=8)

所以,就像我看到的那样,我恢复了我需要的数据,但是我有这个错误:

Key "matriculeCompteur" for array with keys "c_id, c_matriculeCompteur, c_miseEnService, c_miseHorsService, pc_id, pc_invariantPointComptage, pc_nomPointComptage, pc_codeDistribution, pc_localisationPointComptage, pm_id, pm_codeParametre, pm_nomParametre, tu_id, tu_nomTypeUnite, tp_id, tp_nomTypeParametre" does not exist in MySpaceMyBundle:MyFolder:details.html.twig at line 41

第41行对应<td>{{ compteur.matriculeCompteur}}</td>.

如何正确显示我的数据?

数组中没有名为 "matriculeCompteur" 的字段,该字段名为 "c_matriculeCompteur"。

而不是

<td>{{ compteur.matriculeCompteur}}</td>

你应该使用

<td>{{ compteur.c_matriculeCompteur}}</td>

<td>{{ attribute(compteur, 'c_matriculeCompteur') }}</td>

事实上我找到了我的解决方案。问题出在我的树枝视图中,而不是我的查询中。

为了恢复所有数据,我需要循环我所有的关联。看看我的 table 正文的树枝代码:

<tbody>
  {% for compteur in arrayCompteur %}
    <tr>
      <td>{{ compteur.matriculeCompteur}}</td>
      <td>{{ compteur.miseEnService|date("Y-m-d", "Europe/Paris")}}</td>
      <td>{{ compteur.miseHorsService|date("Y-m-d", "Europe/Paris")}}</td>
      <td>
        <table>
          <tr>
              <th>Code</th>
              <th>Nom</th>
              <th>Type</th>
              <th>Unité</th>
            </tr>
          {% for parametre in compteur.parametresMesure %}
            <tr>
              <td>{{ parametre.codeParametre}}</td>
              <td>{{ parametre.nomParametre}}</td>
              <td>{{ parametre.typesUnite}}</td>
              <td>{{ parametre.typesParametre}}</td>
            </tr>
          {% endfor %}
        </table>
      </td>
    </tr>
  {% endfor %}
</tbody>

现在我的所有数据都在 table 中正确显示了。

感谢您的宝贵时间。