Php “关键”;名称“;对于带有键的数组";1、2“;GirManageParcsBundle:Parcs:manage.html.twig中不存在

Php “关键”;名称“;对于带有键的数组";1、2“;GirManageParcsBundle:Parcs:manage.html.twig中不存在,php,symfony,doctrine-orm,twig,dql,Php,Symfony,Doctrine Orm,Twig,Dql,我在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

我在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
时,我有一个错误第35行的GirGestionPatrimoinesBundle:Parcs:manage.html.twig中不存在键为“1,2”的数组的键“name”

下面是我的小树枝的代码

{# 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>
这是集成类/实体代码:

 /**
 * 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;
}
这是最后一个,建筑物类别/实体代码:

 /**
 * 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)

为避免此错误,请确保在Twig中使用的变量已定义且不为null:

{# 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>
{CONTENT}

阿克图埃勒局势 帕克斯 {parc%中的parc为%s} {%如果定义了parc.name且parc.name不为空%} {{parcs.name} {%else%} 没有名字的公园 {%endif%} {%endfor%}


顺便说一句,您的for循环中有一个输入错误,请查看上面的代码。

我想您忘记给列加别名了:

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 %}
{%用于parc%中的parc}
{{parcs.bcnt}
{{parcs.ecnt}
{%endfor%}

很抱歉输入错误,我尝试了您的代码。我的错误被纠正了。但是,它不显示我想要的数据。顺便说一下,它没有显示任何内容。我想显示属于parc的建筑物和集合的数量,当然还要显示parc的名称。感谢您的帮助。为此,您必须向我们展示您的类和/或类类型,以查看您的实体之间的关系。请查看riska对集合和建筑的回答;)如果我同意你的建议,我有一个错误:“.twig行35中不存在键为“0”的数组的键“bcnt”。我认为这不是解决方案。谢谢。嗯,真奇怪。尝试在twig中使用var_dump来更好地查看parc和parcs中的数据:{{dump(parc)}{{dump(parcs)}}根据您的更新(以及twig文档:),我编写的解决方案应该可以工作。你清除缓存了吗?是的,我清除了缓存。而且,我刚刚看到我犯了一个打字错误。所以它给了我一个好结果。对不起,真的。。。现在我想说出帕洛阿尔托研究中心的名字,然后是属于他的团队和建筑的数量。一个如何使用twig的想法?按名称分组在查询中,将分组条件放入select(例如,选择e.name作为名称,…按e.name分组)。然后,您可以访问twig中的名称,就像访问总和一样。