Symfony2安全数据从第二个实体's形式在第一个实体的表


Symfony2 safe data from second entity's form in table of first entity

如何保存数据从我创建的表单,这是使用2个实体输出不同的选择和输入字段,到第一个实体的表。

主实体是任务。php -在这种形式下,我也得到数据从其他2个实体称为TaskTypes和用户。

它看起来像这样:

$AddTask = new Tasks();
$form = $this->createFormBuilder($AddTask)
    ->add('task_title', 'text', array('label' => 'Aufgabentitel', 'attr' => array('class' => 'first')))
    ->add('task_description', 'textarea', array('label' => 'Aufgabenbeschreibung'))
    ->add('task_types', 'entity', array(
        'class' => 'SeotoolMainBundle:TaskTypes',
        'property' => 'task_type_title',
        'label' => 'Aufgabentyp'))
    ->add('user', 'entity', array(
        'class' => 'SeotoolMainBundle:User',
        'property' => 'username',
        'label' => 'Kundenzuordnung',
        'query_builder' => function(EntityRepository $er ) use ( $request ) {
                return $er->createQueryBuilder('w')
                    ->orderBy('w.username', 'ASC')
                    ->where('w.isAdmin = 0')
                    ->andWhere('w.isActive = 1');
        }
    ))
    ->add('Aufgabe anlegen', 'submit')
    ->getForm();
$form->handleRequest($request);
if ($form->isValid()) {

    $task = new Tasks();
    $task->setTaskTitle($request->request->get('form')['task_title']);
    $task->setTaskDescription($request->request->get('form')['task_description']);
    $em = $this->getDoctrine()->getManager();
    $em->persist($task);
    $em->flush();
    return $this->redirect($this->generateUrl('add_task'));
}

My Entity/Tasks.php如下所示:

...
/**
 * @Assert'Type(type="Seotool'MainBundle'Entity'TaskTypes")
 */
protected $tasktypes;
/**
 * @Assert'Type(type="Seotool'MainBundle'Entity'User")
 */
protected $user;
...
    public function getTaskTypes()
{
    return $this->tasktypes;
}
public function setTaskTypes(TaskTypes $tasktypes = null)
{
    $this->tasktypes = $tasktypes;
}
public function getUser()
{
    return $this->user;
}
public function setUser(User $user = null)
{
    $this->user = $user;
}

我得到了这些代码片段的例子如何使表单与多个实体。但我没有得到它的工作,以保存数据从"外部实体"在表中的"主要实体"

What I tried:

...
   /**
 * @Assert'Type(type="Seotool'MainBundle'Entity'TaskTypes")
 * @ORM'Column(type="integer")
 */
protected $tasktypes;
/**
 * @Assert'Type(type="Seotool'MainBundle'Entity'User")
 * @ORM'Column(type="string")
 */
protected $user;
....
public function getTaskTypes()
{
    return $this->tasktypes;
}
public function setTaskTypes()
{
   return $this->tasktypes;
}
public function getUser()
{
    return $this->user;
}
public function setUser(User $user = null)
{
    $this->user = $user;
}

输出如下错误:

属性"task_types"和方法"addTaskTyp()"/"removeTaskTyp()"、"addTaskType()"/"removeTaskType()"、"setTaskTypes()"、"taskTypes()"、"__set()"或"__call()"都不存在,并且在类"Seotool'MainBundle'Entity'Tasks"中都没有公共访问权限。500内部服务器错误- NoSuchPropertyException

属性名称与getter和setter方法之间存在差异。重新生成getter和setter,以确保它们能够正确匹配。

目前,您将无法在数据库中的task_type字段中添加空值。要改变这种情况,可以在注释中声明:

@ORM'Column(type="integer", nullable=true) 

然后更新数据库模式