我正在使用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链接以提高可读性:
EntryAdmin类:对不起,不得不在这里发帖,由于声誉,我只允许两个链接。由于某种原因,前几行不能正确格式化,对此也很抱歉。
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');
}
}
我很感激任何帮助。
此致 好处
答案 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实体中监督的东西。无论如何,谢谢你的帮助。
此致 好处