Php 选择表单类型的数组到字符串转换错误 我想做的是:

Php 选择表单类型的数组到字符串转换错误 我想做的是:,php,symfony,doctrine,Php,Symfony,Doctrine,我有一个数据库,其中有一个表“teams”和一个属性“weekday”。我生成了我的条令实体,现在我正在构建一个Symfony2表单 我想将带有weekdays的数组保存到teams表中的weekdays属性中。weekdays属性是一个VARCHAR(255),因此它应该能够包含字符串数组。我使用选择类型,,但在提交表单时出现数组到字符串的转换错误 我在做什么: 我使用了Symfony2选择表单类型(带有多个选项),因为团队可以选择几个工作日。我首先检索了我的团队对象数据。然后我把表格做成这样

我有一个数据库,其中有一个表“teams”和一个属性“weekday”。我生成了我的条令实体,现在我正在构建一个Symfony2表单

我想将带有weekdays的数组保存到teams表中的weekdays属性中。weekdays属性是一个VARCHAR(255),因此它应该能够包含字符串数组。我使用选择类型,,但在提交表单时出现数组到字符串的转换错误

我在做什么: 我使用了Symfony2选择表单类型(带有多个选项),因为团队可以选择几个工作日。我首先检索了我的团队对象数据。然后我把表格做成这样:

$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();
提交表单时,我使用实体管理器将更改保存到db:

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())));
    }
错误: 对我来说,这一切似乎都是100%有效的代码。我在symfony2中制作了其他类似的表单。但是,当我在表单中选择一个或多个工作日,然后提交时,会出现以下错误:

执行“UPDATE Team SET weekday=”时发生异常? 其中id=?'带参数{“1”:[“mon”、“tue”、“wed”],“2”:6}:

注意:中的数组到字符串转换 /Users/username/Dropbox/www/projectname/www/vendor/doctor/dbal/lib/doctor/dbal/Connection.php 第1211行

()

我想不出一个办法来解决这个问题。谢谢你的帮助!
我的完整代码是可查看的。

您需要做的是将属性的类型设置为
array
,并且条令为您处理(反)序列化

class Team
{
    /**
     * @ORM\Column(type="array")
     */
    protected $weekdays;

    /* Some more code */
}

所有可能类型的列表都可以在官方文件中找到。

多选输入字段返回一个数组。在尝试将其作为字符串插入数据库之前,需要对其进行按摩。@phpisuber01“按摩”是什么意思?自己将数组转换为字符串?我认为Symfony2和Doctrine应该处理这个。。。通常,我不必在提交后检索formdata并在实体管理器保存它之前对其进行更改,这取决于您希望如何保存数据?JSON、逗号分隔等?您的工作日字段是
varchar()
,因此它只接受字符串。如果你把工作日作为一个多对多关系的实体,条令会帮你解决这个问题。。但是这可能是不必要的。好吧,如果我看一下上面的错误,我看到条令正在执行一个查询,其中他将工作日VARCHAR字段设置为
[“mon”,“tue”,“wed”]
。我以为条令把
[“mon”,“tue”,“wed”]
看作一个字符串?我想他会将这个值直接设置到工作日的VARCHAR中。但事实上,他可能会通过多对多关系正确处理这一问题。我将尝试手动将其设置为字符串数组(逗号分隔)。