SQLSTATE [23000]:完整性约束违规:1048列' ent_text'不能为空

时间:2013-07-29 20:20:55

标签: symfony doctrine-orm sonata-admin

我正在使用symfony2框架开发一个网站,并使用Doctrine作为我的ORM。我有两个实体形成一个简单的双向OneToMany关系,一边是Category,另一边是Entry。为了让用户管理类别和相应的条目,我使用的是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]:

我完全不知道这是从哪里来的,特别是因为表格中的所有必要字段都已填满。以下是所有相应的类,我已经决定发布pastebin链接以提高可读性:

  1. 参赛实体: http://pastebin.com/vp8Ym4wz

  2. 类别实体: http://pastebin.com/vLMJyxdW

  3. EntryAdmin类:对不起,不得不在这里发帖,由于声誉,我只允许两个链接。由于某种原因,前几行不能正确格式化,对此也很抱歉。

  4. 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');
        }
    
    }
    

    我很感激任何帮助。

    此致 好处

3 个答案:

答案 0 :(得分:1)

使用Symfony 2.4,我有一个与非必填字段类似的问题,我不想为空(我想默认为''或0)。使用Symfony表单构建器,如果不需要字段并且还留空(文本)或默认(选择),则实体字段将填充NULL值。 documentation表示您应在表单字段中添加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的原因。

答案 1 :(得分:0)

将nullable = true添加到任何可以为null的列。将每个属性映射到表单字段的事实并不排除该属性以空值结束。

更新注释后,您需要更新数据库架构。

答案 2 :(得分:0)

由于没有任何效果,我决定从数据库中删除该字段并重新创建它。出于某种原因,这是解决方案。很明显,没有魔法这样的东西,它一定是我在Entry实体中监督的东西。无论如何,谢谢你的帮助。

此致 好处