我有一个表格,其中包含一个实体程序,一个实体组织和另一个程序组织,它们在第一个之间建立关系。
此实体 ProgramOrganization 与 OneToMany/ManyToOne 相关,因为它包含其他字段。
问题是表单显示正确,但是当我想将其保存在数据库中时,我收到以下消息:
"找到类型为 ...''NomBundle''Entity''Organization on Association ...''NomBundle''Entity''Program#programOrganisations,但期望...''NomBundle''Entity''ProgramOrganization"
我使用SensioGeneratorBundle,并且doctrine:shema:valid是正确的。
另一方面,如果我删除这种关系,一切都会正确保存。
以下是我的代码摘录:(属性未翻译)
实体计划:
/**
* @ORM'OneToMany(targetEntity="ProgrammeOrganisation", mappedBy="programme")
*/
protected $programmeOrganisations;
/**
* Constructor
*/
public function __construct()
{
$this->programmeOrganisations = new 'Doctrine'Common'Collections'ArrayCollection();
}
/**
* Add programmeOrganisations
*
* @param '...'...'Entity'ProgrammeOrganisation $programmeOrganisations
* @return Programme
*/
public function addProgrammeOrganisation('...'Entity'ProgrammeOrganisation $programmeOrganisations)
{
$this->programmeOrganisations[] = $programmeOrganisations;
return $this;
}
/**
* Remove programmeOrganisations
*
* @param '...'...'Entity'ProgrammeOrganisation $programmeOrganisations
*/
public function removeProgrammeOrganisation('...'...'Entity'ProgrammeOrganisation $programmeOrganisations)
{
$this->programmeOrganisations->removeElement($programmeOrganisations);
}
/**
* Get programmeOrganisations
*
* @return 'Doctrine'Common'Collections'Collection
*/
public function getProgrammeOrganisations()
{
return $this->programmeOrganisations;
}
实体组织 :
/**
*
* @ORM'OneToMany(targetEntity="ProgrammeOrganisation", mappedBy="organisation")
*/
protected $programmeOrganisations;
/**
* Constructor
*/
public function __construct()
{
$this->programmeOrganisations = new 'Doctrine'Common'Collections'ArrayCollection();
}
/**
* Add programmeOrganisations
*
* @param '...'...'Entity'ProgrammeOrganisation $programmeOrganisations
* @return Organisation
*/
public function addProgrammeOrganisation('...'...'Entity'ProgrammeOrganisation $programmeOrganisations)
{
$this->programmeOrganisations[] = $programmeOrganisations;
return $this;
}
/**
* Remove programmeOrganisations
*
* @param '...'...'Entity'ProgrammeOrganisation $programmeOrganisations
*/
public function removeProgrammeOrganisation('...'...'Entity'ProgrammeOrganisation $programmeOrganisations)
{
$this->programmeOrganisations->removeElement($programmeOrganisations);
}
/**
* Get programmeOrganisations
*
* @return 'Doctrine'Common'Collections'Collection
*/
public function getProgrammeOrganisations()
{
return $this->programmeOrganisations;
}
实体计划组织:
class ProgrammeOrganisation
{
/**
*
* @ORM'Id
* @ORM'ManyToOne(targetEntity="Programme", inversedBy="programmeOrganisations")
* @ORM'JoinColumn(name="programme_id", referencedColumnName="id")
*/
private $programme;
/**
*
* @ORM'Id
* @ORM'ManyToOne(targetEntity="Organisation", inversedBy="programmeOrganisations")
* @ORM'JoinColumn(name="organisation_id", referencedColumnName="id")
*/
private $organisation;
/**
* @var integer
*
* @ORM'ManyToOne(targetEntity="ContributionType")
*/
private $contributionType;
/**
* @var 'DateTime
*
* @ORM'Column(name="date", type="date", nullable=true)
*/
private $date;
}
程序类型
->add('programmeOrganisations' , 'entity' , array(
'class' => 'NomBundle:Organisation' ,
'label' => 'Organisations list',
'property' => 'label' ,
'expanded' => false ,
'multiple' => true ,
))
程序控制器
public function createAction(Request $request)
{
$entity = new Programme();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('programme_show', array('id' => $entity->getId())));
}
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
/**
* Creates a form to create a Programme entity.
*
* @param Programme $entity The entity
*
* @return 'Symfony'Component'Form'Form The form
*/
private function createCreateForm(Programme $entity)
{
$form = $this->createForm(new ProgrammeType(), $entity, array(
'action' => $this->generateUrl('programme_create'),
'method' => 'POST',
));
$form->add('submit', 'submit', array('label' => 'Save'));
return $form;
}
/**
* Displays a form to create a new Programme entity.
*
* @Route("/new", name="programme_new")
* @Method("GET")
* @Template()
*/
public function newAction()
{
$entity = new Programme();
$form = $this->createCreateForm($entity);
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
我认为
您的错误在这里,我没有看到您的计划和组织之间的链接,但您的表单类型说我想要一个与$ProgrammeOrganizations变量上的组织实体链接的表单,该变量被声明为计划组织实体而不是组织。
->add('programmeOrganisations' , 'entity' , array(
'class' => 'NomBundle:ProgrammeOrganisation ' ,
'label' => 'Organisations list',
'property' => 'label' ,
'expanded' => false ,
'multiple' => true ,
))
应该这样做。也许还有其他我没有注意到的错误