6

私がやろうとしていること:

テーブル「teams」とプロパティ「weekday」を含むデータベースがあります。私は教義エンティティを生成し、今はSymfony2フォームを作成しています。

平日を含む配列をteamsテーブルのweekdaysプロパティに保存したいと思います。weekdaysプロパティはVARCHAR(255)であるため、文字列配列を含めることができるはずです。選択タイプを使用しますが、フォームを送信すると配列から文字列への変換エラーが発生します

私がしていること:

私はSymfony2選択フォームタイプ(複数オプション付き)を使用しました。これは、チームが利用可能な平日を2、3日選択できるためです。最初にチームオブジェクトデータを取得しました。次に、次のようなフォームを作成します。

$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でこのような他のフォームを作成しました。しかし、フォームで1つまたは複数の平日を選択して送信すると、次のエラーが発生します。

'UPDATE team SET weekday =?の実行中に例外が発生しました WHERE id =? ' with params {"1":["mon"、 "tue"、 "wed"]、 "2":6}:

注意:/Users/username/Dropbox/www/projectname/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php行1211の配列から文字列への変換

完全なエラーページはこちら

これを修正する方法が思いつかない。感謝します!私の完全なコードはこの要点で見ることができます。

4

1 に答える 1

12

あなたがする必要があるのはあなたのプロパティのタイプをに設定することでありarray、Doctrineはあなたのために(逆)シリアル化を処理します。

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

    /* Some more code */
}

可能なすべてのタイプのリストは、公式ドキュメントにあります。

于 2013-01-02T21:23:51.457 に答える