我正在尝试创建的表单有问题而其他主题无法帮助我。这就是我想要做的。
这是数据库方案的一部分:
现在我想创建一个可以创建课程的表单。在那个课程中,我想创建多个会话,我可以添加日期。它应该是这样的:
在课程实体中,我有:
/**
* @ORM\OneToMany(targetEntity="Session", mappedBy="Course")
*/
private $session;
public function getSession()
{
return $this->session;
}
在我的会话实体中,我有:
/**
* @var \Studyx\EnrolmentBundle\Entity\Course
*
* @ORM\ManyToOne(targetEntity="Studyx\EnrolmentBundle\Entity\Course")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="course_ID", referencedColumnName="ID")
* })
*/
private $course;
在 CourseAdmin课程中,我有:
->add('session', 'sonata_type_collection', array(
'type_options' => array(
// Prevents the "Delete" option from being displayed
'delete' => false,
'delete_options' => array(
// You may otherwise choose to put the field but hide it
'type' => 'hidden',
// In that case, you need to fill in the options as well
'type_options' => array(
'mapped' => false,
'required' => false,
)
)
)
), array(
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'position'
))
在我的表单中,我看到“添加新”按钮,但是当我点击它时,我收到错误:
属性“session”和方法“addSession()”,“setSession()”,“__ set()”或“__call()”之一都不存在,并且在“Name \ MyBundle \ Entity”类中具有公共访问权限\场”。
我明白了。但是我怎样才能做到这一点呢?我应该将关系更改为多对多还是使用其他字段或......?有人可以帮我这个吗?
更新
在 SessionAdmin 中,我有:
$formMapper->add('type', 'text', array('label' => 'Type'));
问题是我真的不知道如何在此管理员表单中结合session_has_date ......
答案 0 :(得分:2)
由于课程和课程之间存在1..n关系(一门课程包含许多课程)。这意味着Course#getSession()
方法没有意义(没有一个会话,有很多会话)。
此外,在表单中添加新会话时,Form组件需要某种方式来添加新会话。包含Course#addSession(Session $session)
方法来执行此操作。如果没有这种方法,就无法在课程中添加新课程。