【问题标题】:Key "name" for array with keys "1, 2" does not exist in GirManageParcsBundle:Parcs:manage.html.twigGirManageParcsBundle:Parcs:manage.html.twig 中不存在键为“1、2”的数组的键“名称”
【发布时间】:2014-12-01 12:45:18
【问题描述】:

我在 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”的数组的键“名称”

所以,这是我的树枝的代码

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

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

【问题讨论】:

    标签: php symfony doctrine-orm twig dql


    【解决方案1】:

    为避免此错误,请确保您在 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】:

    我想你忘了给列起别名:

    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 %}
    

    【讨论】:

    • 如果我喜欢你的建议,我有这个错误:“.twig 第 35 行中不存在键为“0”的数组的键“bcnt”。”我不认为这是解决方案。谢谢。
    • 嗯,这很奇怪。尝试在 twig 中使用 var_dump 以更好地查看 parc 和 parcs 中的数据:{{ dump(parc) }} {{ dump(parcs) }}
    • 根据您的更新(和树枝文档:twig.sensiolabs.org/doc/templates.html#variables),我编写的解决方案应该可以工作。你清除缓存了吗?
    • 是的,我已经清除了缓存。而且,我刚刚看到我犯了一个拼写错误。所以它给我带来了好的结果。对不起,真的……现在我想写公园的名字,然后是属于他的合奏和建筑物的数量。一个想法如何用树枝制作它?
    • 在查询中按名称分组,将分组条件放入选择中(例如 SELECT e.name AS name, ... GROUP BY e.name)。然后,您可以访问 twig 中的名称,就像访问总和一样。
    猜你喜欢
    • 2016-06-14
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    相关资源
    最近更新 更多