Ключ & quot; имя & quot; для массива с ключами «1, 2»; не существует в GirManageParcsBundle: Parcs: manage.html.twig

у меня есть это запрос в SQL:

SELECT count(distinct b.id), count(distinct e.id) FROM building, ensembles e, `parcs` p WHERE p.id = "1" AND e.parcs_id = p.id AND e.id = b.ensembles_id

Вот как я использую этот запрос в моем Проект Symfony, в контроллере ManageController.php :

class ManageController extends Controller
{

public function indexAction()
{
$em=$this->getDoctrine()->getManager();
$parc = $em->getRepository('GirDatabaseBundle:Parcs');
$ensemble = $em->getRepository('GirDatabaseBundle:Ensembles');
$building = $em->getRepository('GirDatabaseBundle:Buildings');

$query = $em->createQuery(
'SELECT p.name, count(distinct b.id), count(distinct e.id)
FROM GirDatabaseBundle:Buildings b, GirDatabaseBundle:Ensembles e, GirDatabaseBundle:Parcs p
WHERE p.id in (:id)
AND e.parcs = p.id
AND e.id = b.ensembles
GROUP BY p.id')
->setParameter('id', '1');

$parc = $query->getResult();

return $this->render('GirManageParcsBundle:Parcs:manage.html.twig', array('parc' => $parc ));
}

Но когда я запустил свою страницу html.twig manage.html.twig, У меня есть это ошибка:
Ключ «name» для массива с ключами «1, 2» не существует в GirGestionPatrimoinesBundle: Parcs: manage.html.twig в строке 35

Итак, вот код для моей ветки:

{# CONTENT #}
<div class="panel-body">
<p class="text-justify">
<div class="jumbotron">
<h4><u>Situation actuelle</u></h4>
<p>
<h5>PARCS</h5>
{% for parcs in parc %}
<h4> {{ parcs.name}} </h4>
{% endfor %}
</p>
</div>
</p>

Я думаю, я не использую хороший способ для отображения данных, как я хочу. Вы знаете, что это работает? И я бы хотел дисплей имя моего парка а также его количество ансамблей и зданий которые принадлежат ему.

Это код класса / сущности Parcs:
используйте Doctrine \ ORM \ Mapping в качестве ORM;

/**
* Parcs
*
* @ORM\Table(name="parcs")
* @ORM\Entity
*/
class Parcs
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;

/**
* @var string
*
* @ORM\Column(name="name", type="string", length=150, nullable=false)
*/
private $name;

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set nom
*
* @param string $name
* @return Parcs
*/
public function setName($name)
{
$this->nom = $name;

return $this;
}

/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}

Это класс ансамбля / код сущности:

 /**
* Ensembles
*
* @ORM\Table(name="ensembles")
* @ORM\Entity
*/
class Ensembles
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;

/**
* @var string
*
* @ORM\Column(name="referenceClient", type="string", length=150, nullable=false)
*/
private $referenceclient;

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set referenceclient
*
* @param string $referenceclient
* @return Ensembles
*/
public function setReferenceclient($referenceclient)
{
$this->referenceclient = $referenceclient;

return $this;
}

/**
* Get referenceclient
*
* @return string
*/
public function getReferenceclient()
{
return $this->referenceclient;
}

/**
* @ORM\ManyToOne(targetEntity="Gir\DatabaseBundle\Entity\Parcs")
* @ORM\JoinColumn(nullable=false)
*/
private $parcs;

/**
* Set parcs
*
* @param \Gir\DatabaseBundle\Entity\Parcs $parcs
* @return Ensembles
*/
public function setParcs(\Gir\DatabaseBundle\Entity\Parcs $parcs)
{
$this->parcs = $parcs;

return $this;
}

/**
* Get parcs
*
* @return \Gir\DatabaseBundle\Entity\Parcs
*/
public function getParcs()
{
return $this->parcs

И это последний, класс зданий / код объекта:

class Batiments
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;

/**
* @var string
*
* @ORM\Column(name="referenceBatiment", type="string", length=150, nullable=false)
*/
private $referencebatiment;

/**
* @ORM\ManyToOne(targetEntity="Gir\DatabaseBundle\Entity\Ensembles")
* @ORM\JoinColumn(nullable=false)
*/
private $ensembles;

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set referencebatiment
*
* @param string $referencebatiment
* @return Batiments
*/
public function setReferencebatiment($referencebatiment)
{
$this->referencebatiment = $referencebatiment;

return $this;
}

/**
* Get referencebatiment
*
* @return string
*/
public function getReferencebatiment()
{
return $this->referencebatiment;
}

/**
* Set ensembles
*
* @param \Gir\DatabaseBundle\Entity\Ensembles $ensembles
* @return Batiments
*/
public function setEnsembles(\Gir\DatabaseBundle\Entity\Ensembles $ensembles)
{
$this->ensembles = $ensembles;

return $this;
}

/**
* Get ensembles
*
* @return \Gir\DatabaseBundle\Entity\Ensembles
*/
public function getEnsembles()
{
return $this->ensembles;
}

Чтобы ответить на комментарий riska:

За {{ dump(parc) }}, это возвращает меня:

array (size=1)
0 =>
array (size=2)
'bcnt' => string '307' (length=3)
'ecnt' => string '104' (length=3)

и для {{ dump(parcs) }}, Я имею:

array (size=2)
'bcnt' => string '307' (length=3)
'ecnt' => string '104' (length=3)

0

Решение

Я думаю, что вы забыли псевдоним столбцы:

SELECT count(distinct b.id) AS bcnt, count(distinct e.id) AS ecnt
...

Теперь вы должны иметь доступ к этим переменным:

{% for parcs in parc %}
<h4> {{ parcs.bcnt }} </h4>
<h4> {{ parcs.ecnt }} </h4>
{% endfor %}
2

Другие решения

Чтобы избежать этой ошибки, убедитесь, что переменная, которую вы используете в Twig, определена и не равна нулю:

{# CONTENT #}
<div class="panel-body">
<p class="text-justify">
<div class="jumbotron">
<h4><u>Situation actuelle</u></h4>
<p>
<h5>PARCS</h5>
{% for parc in parcs %}
{% if parc.name is defined and parc.name is not null %}
<h4> {{ parcs.name}} </h4>
{% else %}
<h4> Parc without name</h4>
{% endif %}
{% endfor %}
</p>
</div>
</p>

Кстати, у вас есть опечатка в цикле for, посмотрите код выше.

2

По вопросам рекламы [email protected]