2012-05-07 21 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' –

相关问题