2012-05-07 18 views
3

我通過互聯網搜索可供答案,但我不能找到一個理由: 我有一個表的公司,一臺companyType,所以:實體傳遞到選擇字段必須管理

/** 
* Acme\UserBundle\Entity\Company 
* 
* @ORM\Table(name="company") 
* @ORM\Entity 
*/ 
class Company 
{ 
/** 
* @var integer $id 
* 
* @ORM\Column(name="id", type="integer", nullable=false) 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $id; 
/** 
* @var CompanyType 
* 
* @ORM\ManyToOne(targetEntity="CompanyType") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="company_type_id", referencedColumnName="id") 
* }) 
*/ 
private $companyType; 
... 

}

/** 
* Acme\UserBundle\Entity\CompanyType 
* 
* @ORM\Table(name="company_type") 
* @ORM\Entity 
*/ 
class CompanyType 
{ 
/** 
* @var integer $id 
* 
* @ORM\Column(name="id", type="integer", nullable=false) 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $id; 
/** 
* @var string $name 
* 
* @ORM\Column(name="name", type="string", length=45, nullable=true) 
*/ 
private $name; 
.... 
public function __toString(){ 
    return $this->name; 
} 

}
,然後,在formtype類:

class CompanyForm extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
    $builder 
     ->add('name') 
     ->add('siren') 
     ->add('siret') 
     ->add('tvaCommun') 
     ->add('apeCode') 
    ; 
    $builder->add('activity','collection', array('type'=> new ActivityForm()));  
    $builder->add('companyType','entity',array(
      'class' => 'AcmeUserBundle:CompanyType', 
    )); 
    } 
... 
} 

當我嘗試使用以下形式:

{{ form_row(company.companyType) }} 
視圖

,我得到了錯誤信息。

+1

您是否定義了多個實體管理器?當表單使用一個實體管理器(默認)但我的控制器使用另一個實體管理器時,我遇到了這個問題我通常需要傳入實體經理的名字。 – Cerad

回答

6

我已經找到了原因,因爲我在公司爲form做了一個companyType的實例。意思是:

$cType=new CompanyType(); 
$company=new Company(); 
$company->getCompanyTypes()->add($cType); 
$cForm=$this->createFrom(new CompanyForm(),$company); 

這就是它拋出這個異常的原因。我不應該爲表單初始化任何公司類型。因爲我需要選擇它。
感謝誰試圖幫助。希望這可以幫助別人。

0

此錯誤表示傳遞給實體字段的CompanyType對象必須由EntityManager管理,即必須通過實體管理器持久保存到您的數據庫。

您確定CompanyType實體存儲在AcmeUserBundle中嗎?

+0

我覺得'CompanyType'不是這裏的實體,insted是'Company'。所以他不應該堅持'CompanyType' –

相關問題