Symfony实体类似乎不是托管的Doctrine实体

时间:2015-09-22 10:19:07

标签: php symfony doctrine-orm

我尝试创建一个带有下拉菜单的表单,该菜单包含名为" main_category"的数据库表的所有条目。

这是我的TemplateUploadType表单:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->setAction('upload')
        ->setMethod('POST')

        ->add('service_category', 'entity', array(
                'label' => 'tpl_upload_service_category_label',
                'class' => '\AppBundle\Entity\MainCategory',
                'placeholder' => 'tpl_upload_service_category_placeholder',
                'attr' => array(
                    'required' => 'true',
                    'class' => 'form-control'
                ),
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('m')
                        ->orderBy('m.serviceCategoryId', 'ASC');
                },
            )
        )

        // button
        ->add('submit', 'submit', array(
                'attr' => array(
                    'class' => 'btn btn-default'
                )
            )
        );
}

这是我的" MainCategory"我使用doctrine命令行工具创建的实体:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

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

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

    /**
     * @var string
     *
     * @ORM\Column(name="main_category", type="string", nullable=false)
     */
    private $mainCategory = 'SAP';

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

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="Costfactor", inversedBy="scid")
     * @ORM\JoinTable(name="category_has_costfactor",
     *   joinColumns={
     *     @ORM\JoinColumn(name="scid", referencedColumnName="service_category_id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="cfid", referencedColumnName="costfactor_id")
     *   }
     * )
     */
    private $cfid;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="CcRef", inversedBy="serviceCategory")
     * @ORM\JoinTable(name="cc_master",
     *   joinColumns={
     *     @ORM\JoinColumn(name="service_category_id", referencedColumnName="service_category_id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="cc_parameter_id", referencedColumnName="cc_parameter_id")
     *   }
     * )
     */
    private $ccParameter;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="KpiRef", inversedBy="serviceCategory")
     * @ORM\JoinTable(name="kpi_master",
     *   joinColumns={
     *     @ORM\JoinColumn(name="service_category_id", referencedColumnName="service_category_id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="kpi_parameter_id", referencedColumnName="kpi_parameter_id")
     *   }
     * )
     */
    private $kpiParameter;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="SecRef", inversedBy="serviceCategory")
     * @ORM\JoinTable(name="sec_master",
     *   joinColumns={
     *     @ORM\JoinColumn(name="service_category_id", referencedColumnName="service_category_id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="sec_parameter_id", referencedColumnName="sec_parameter_id")
     *   }
     * )
     */
    private $secParameter;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="SlRef", inversedBy="serviceCategory")
     * @ORM\JoinTable(name="sl_master",
     *   joinColumns={
     *     @ORM\JoinColumn(name="service_category_id", referencedColumnName="service_category_id")
     *   },
     *   inverseJoinColumns={
     *     @ORM\JoinColumn(name="sl_parameter_id", referencedColumnName="sl_parameter_id")
     *   }
     * )
     */
    private $slParameter;

    /**
     * Constructor
     */
    public function __construct()
    {
        $this->cfid = new \Doctrine\Common\Collections\ArrayCollection();
        $this->ccParameter = new \Doctrine\Common\Collections\ArrayCollection();
        $this->kpiParameter = new \Doctrine\Common\Collections\ArrayCollection();
        $this->secParameter = new \Doctrine\Common\Collections\ArrayCollection();
        $this->slParameter = new \Doctrine\Common\Collections\ArrayCollection();
    }


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

    /**
     * Set serviceCategory
     *
     * @param string $serviceCategory
     * @return MainCategory
     */
    public function setServiceCategory($serviceCategory)
    {
        $this->serviceCategory = $serviceCategory;

        return $this;
    }

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

    /**
     * Set mainCategory
     *
     * @param string $mainCategory
     * @return MainCategory
     */
    public function setMainCategory($mainCategory)
    {
        $this->mainCategory = $mainCategory;

        return $this;
    }

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

    /**
     * Set comment
     *
     * @param string $comment
     * @return MainCategory
     */
    public function setComment($comment)
    {
        $this->comment = $comment;

        return $this;
    }

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

    /**
     * Add cfid
     *
     * @param \AppBundle\Entity\Costfactor $cfid
     * @return MainCategory
     */
    public function addCfid(\AppBundle\Entity\Costfactor $cfid)
    {
        $this->cfid[] = $cfid;

        return $this;
    }

    /**
     * Remove cfid
     *
     * @param \AppBundle\Entity\Costfactor $cfid
     */
    public function removeCfid(\AppBundle\Entity\Costfactor $cfid)
    {
        $this->cfid->removeElement($cfid);
    }

    /**
     * Get cfid
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getCfid()
    {
        return $this->cfid;
    }

    /**
     * Add ccParameter
     *
     * @param \AppBundle\Entity\CcRef $ccParameter
     * @return MainCategory
     */
    public function addCcParameter(\AppBundle\Entity\CcRef $ccParameter)
    {
        $this->ccParameter[] = $ccParameter;

        return $this;
    }

    /**
     * Remove ccParameter
     *
     * @param \AppBundle\Entity\CcRef $ccParameter
     */
    public function removeCcParameter(\AppBundle\Entity\CcRef $ccParameter)
    {
        $this->ccParameter->removeElement($ccParameter);
    }

    /**
     * Get ccParameter
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getCcParameter()
    {
        return $this->ccParameter;
    }

    /**
     * Add kpiParameter
     *
     * @param \AppBundle\Entity\KpiRef $kpiParameter
     * @return MainCategory
     */
    public function addKpiParameter(\AppBundle\Entity\KpiRef $kpiParameter)
    {
        $this->kpiParameter[] = $kpiParameter;

        return $this;
    }

    /**
     * Remove kpiParameter
     *
     * @param \AppBundle\Entity\KpiRef $kpiParameter
     */
    public function removeKpiParameter(\AppBundle\Entity\KpiRef $kpiParameter)
    {
        $this->kpiParameter->removeElement($kpiParameter);
    }

    /**
     * Get kpiParameter
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getKpiParameter()
    {
        return $this->kpiParameter;
    }

    /**
     * Add secParameter
     *
     * @param \AppBundle\Entity\SecRef $secParameter
     * @return MainCategory
     */
    public function addSecParameter(\AppBundle\Entity\SecRef $secParameter)
    {
        $this->secParameter[] = $secParameter;

        return $this;
    }

    /**
     * Remove secParameter
     *
     * @param \AppBundle\Entity\SecRef $secParameter
     */
    public function removeSecParameter(\AppBundle\Entity\SecRef $secParameter)
    {
        $this->secParameter->removeElement($secParameter);
    }

    /**
     * Get secParameter
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getSecParameter()
    {
        return $this->secParameter;
    }

    /**
     * Add slParameter
     *
     * @param \AppBundle\Entity\SlRef $slParameter
     * @return MainCategory
     */
    public function addSlParameter(\AppBundle\Entity\SlRef $slParameter)
    {
        $this->slParameter[] = $slParameter;

        return $this;
    }

    /**
     * Remove slParameter
     *
     * @param \AppBundle\Entity\SlRef $slParameter
     */
    public function removeSlParameter(\AppBundle\Entity\SlRef $slParameter)
    {
        $this->slParameter->removeElement($slParameter);
    }

    /**
     * Get slParameter
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getSlParameter()
    {
        return $this->slParameter;
    }
}

由于使用上述代码,我收到错误消息:
Class&#34; \ AppBundle \ Entity \ MainCategory&#34;似乎不是一个托管的Doctrine实体。你忘了映射吗?

我做错了什么?如果您需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:2)

我认为问题出在这一行:

'class' => '\AppBundle\Entity\MainCategory',

删除第一个尾部斜杠:

'class' => 'AppBundle\Entity\MainCategory',

答案 1 :(得分:1)

感谢@malcolm

,我找到了答案

首先我更改了我的TemplateUploadType表单,因此在行的开头没有斜杠:

'class' => 'AppBundle\Entity\MainCategory',

这导致了另一个错误,称为&#34; Catchable Fatal Error:类AppBundle \ Entity \ MainCategory的对象无法转换为字符串&#34; 。调查这一点我找到了答案in this blog post

基本上我必须覆盖实体类中的__toString()函数。

public function __toString()
{
    return strval($this->serviceCategory);
}