1

私は symfony2 フレームワークで Web サイトを開発しており、Doctrine を ORM として使用しています。単純な双方向の OneToMany 関係を形成する 2 つのエンティティがあり、一方がカテゴリで、多がエントリです。ユーザーがカテゴリと対応するエントリを管理できるようにするために、私は SonataAdminBundle を使用しています。管理バンドルに簡単なファイルのアップロードも実装しました。新しいエントリを保存しようとすると、次のエラーが表示されます。

An exception occurred while executing 'INSERT INTO Entry
(title, ent_text, img, author,  pub_date, slug, cat_id) VALUES (?, ?, ?, ?, ?, ?, ?)'
with params ["BLa", null, "asdf.jpg", "User", null, "bla", 1]:

特にフォームの必要なフィールドがすべて入力されているため、これがどこから来たのかまったくわかりません。対応するすべてのクラスは次のとおりです。読みやすくするために、ペーストビンのリンクを投稿することにしました。

  1. エントリ エンティティ: http://pastebin.com/vp8Ym4wz

  2. カテゴリ エンティティ: http://pastebin.com/vLMJyxdW

  3. EntryAdmin クラス: 申し訳ありませんが、ここに投稿する必要がありました。評判のために 2 つのリンクしか許可されていません。また、何らかの理由で最初の数行が適切にフォーマットされません。それについても申し訳ありません。

namespace S4P\MainBundle\Admin;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;

class EntryAdmin extends Admin {

    protected function configureFormFields(FormMapper $formMapper) {
        $formMapper
            ->add('category', 'entity', array('class' => 'S4PMainBundle:Category', 'property' => 'title'))
            ->add('text', null, array('required' => true))
            ->add('image', 'file', array('required' => false))
            ->add('author', null, array('required' => true))
            ->add('title', null, array('required' => true));
    }

    protected function configureDatagridFilters(DatagridMapper $datagridMapper) {
        $datagridMapper
            ->add('text')
            ->add('img_name')
            ->add('author')
            ->add('title');
    }

    protected function configureListFields(ListMapper $listMapper) {
        $listMapper
            ->add('text')
            ->add('img_name')
            ->add('author')
            ->add('title');
    }

}

どんな助けにも感謝します。

よろしくベネ

4

3 に答える 3

1

Symfony 2.4 を使用して、null にしたくない非必須フィールドに同様の問題があります (デフォルトを '' または 0 にしたい)。Symfony フォーム ビルダーを使用して、フィールドが必須ではなく、空白 (テキスト) またはデフォルト (選択) のままの場合、エンティティ フィールドには NULL 値が入力されます。ドキュメントempty_dataには、代替の空のデータ値を指定するために、フォーム フィールドに属性を追加する必要があると記載されています。

$builder->add('gender', 'choice', array(
     'choices' => array(
         'm' => 'Male',
         'f' => 'Female'
     ),
     'required'    => false,
     'empty_value' => 'Choose your gender',
     'empty_data'  => ''
));

ドキュメントに基づくと、これは正しい解決策のようです。

しかし、残念ながらこれまでのところ、これは私にとってもうまくいきません。エラーが発生し続けます:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'gender' cannot be null

そして、クエリにはnullそのフィールドが含まれているため、empty_data属性が何の効果もないように見えます。

注: 私のエンティティはデフォルト値を '' と定義しており、nullable=true はありません。データベースは NOT NULL に設定されています。したがって、これらが NULL として送信される理由はわかりません。

于 2014-07-16T22:29:35.027 に答える
0

nullable=true を null にできる任意の列に追加します。各プロパティがフォーム フィールドにマップされているという事実は、そのプロパティが null 値になることを排除しません。

注釈を更新した後、データベース スキーマを更新する必要があります。

于 2013-07-29T20:26:44.303 に答える
0

何も機能しなかったので、データベースからフィールドを削除して再作成することにしました。何らかの理由でこれが解決策でした。魔法など存在しないことは明らかなので、エントリーエンティティで監視していたものだったに違いありません。とにかく助けてくれてありがとう。

よろしくベネ

于 2013-07-30T13:28:08.783 に答える