6

我正在尝试做的事情:

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

我想将一个包含工作日的数组保存到我的 team 表中的 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();

提交表单后,我使用实体管理器将更改保存到数据库:

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 teams SET weekday = ? 哪里 id = ?带参数 {"1":["mon","tue","wed"],"2":6}:

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

完整的错误页面在这里

我想不出办法来解决这个问题。帮助表示赞赏!我的完整代码可以在这个 gist 上查看。

4

1 回答 1

12

您需要做的是将您的属性类型设置为array,Doctrine 会为您处理(反)序列化。

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

    /* Some more code */
}

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

于 2013-01-02T21:23:51.457 回答