簡體   English   中英

Symfony實體類似乎不是托管的Doctrine實體

[英]Symfony entity class seems not to be a managed Doctrine entity

我嘗試創建一個帶有下拉菜單的表單,該菜單包含名為“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'
                )
            )
        );
}

這是我使用doctrine命令行工具創建的“MainCategory”實體:

<?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;
    }
}

由於使用上面的代碼我收到錯誤消息:
類“\\ AppBundle \\ Entity \\ MainCategory”似乎不是托管的Doctrine實體。 你忘記了映射嗎?

我究竟做錯了什么? 如果您需要更多信息,請告訴我。

我認為問題出在這一行:

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

刪除第一個尾部斜杠:

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

我找到了答案,感謝@malcolm

首先,我更改了我的TemplateUploadType表單,因此在行的開頭沒有斜杠:

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

這導致另一個錯誤稱為“可捕獲的致命錯誤:類AppBundle \\ Entity \\ MainCategory的對象無法轉換為字符串” 調查這個我在這篇博文中找到了答案。

基本上我不得不覆蓋實體類中的__toString()函數。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM