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
链接到 Compteurs 的 selected 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 中正确显示了。
感谢您的宝贵时间。
我的 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
链接到 Compteurs 的 selected 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 中正确显示了。
感谢您的宝贵时间。