JSS*_*JSS 6 php doctrine symfony
我有一个数据库,其中包含表"团队"和属性"工作日".我生成了我的学说实体,现在我正在构建一个Symfony2表单.
我想将工作日的数组保存到团队表中的工作日属性中.weekdays属性是VARCHAR(255),因此它应该能够包含字符串数组.我使用选择类型,但在提交表单时我得到一个数组到字符串转换错误.
我使用了Symfony2选择formtype(带有多个选项),因为团队可以在工作日选择几个工作日.我首先检索了我的团队对象数据.然后我做这样的表格:
$builder = $this->createFormBuilder($team);
$form = $builder->add('weekday', 'choice', array(
'choices' => array(
'mon' => 'Monday',
'tue' => 'Tuesday',
'wed' => 'Wednesday',
'thu' => 'Thursday',
'fri' => 'Friday',
'sat' => 'Saturday',
'sun' => 'Sunday',
),
'multiple' => true,
'expanded' => true,
'label' => 'Day of the week',
'label_attr' => array('class' => 'control-label'),
'attr' => array('placeholder' => 'Day of the week', 'size' => '7')
))->getForm();
Run Code Online (Sandbox Code Playgroud)
提交表单时,我使用实体管理器将更改保存到数据库:
if ($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
// Save changes to db
$em = $this->getDoctrine()->getManager();
$em->persist($team);
$em->flush();
// Redirect to new canonical url
return $this->redirect($this->generateUrl('team_edit', array('nameCanonical' => $team->getNameCanonical(), 'code' => $team->getCode())));
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎是100%有效的代码.我在symfony2中制作了其他形式.但是当我在表单中选择一个或多个工作日,然后提交时,我收到此错误:
执行'UPDATE teams SET weekday =?时发生异常?WHERE id =?' 用params {"1":["mon","tue","wed"],"2":6}:
注意:/Users/username/Dropbox/www/projectname/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php第1211行中的数组到字符串转换
我想不出办法解决这个问题.帮助赞赏!我的完整代码可以在这个要点上查看.
gil*_*den 12
您需要做的是将属性的类型设置为,array并且Doctrine会为您处理(反)序列化.
class Team
{
/**
* @ORM\Column(type="array")
*/
protected $weekdays;
/* Some more code */
}
Run Code Online (Sandbox Code Playgroud)
所有可能类型的列表都可以在官方文档中找到.