在我的一个ZF2控制器上工作时,我收到了这个错误:
Doctrine\DBAL\DBALException
File: /var/www/microweb2/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:47
Message: An exception occurred while executing 'INSERT INTO quotes (name, email, phone_number, budget, content, date_posted, service_id) VALUES (?, ?, ?, ?, ?, ?, ?)' with params [null, null, null, null, null, null, null]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null
嗯,这似乎是一个非常基本的错误,但我找不到解决方案。过程是这样的:我创建我的表单来显示它,然后我将它与实体Application\Entity\Quote
绑定。然后我用DoctrineHydrator
设置我的保湿器。如果请求是POST
,我使用请求值设置表单值,并使用InputFilter验证它们。不幸的是,如果isValid()
返回true
,则DB返回错误...为什么值为空?
这是我的控制器代码:http://pastebin.com/JVK5xE9r
这是我的实体:http://pastebin.com/NhtaBNW9
这是我的AbstractEntity
:http://pastebin.com/s4L7Cquu
这是我的表单:http://pastebin.com/t7Kmzfk5
这是我的AbstractForm
:http://pastebin.com/36WeyKBf
在问题中包含太多代码。
get()
方法适用于实体,set()
也适用于实体。但那是我唯一的问题!所以我想知道原因。
如果有人能告诉我为什么它不起作用,那就太好了!
答案 0 :(得分:2)
啊我想我现在面对的是你正在做的事情
$quote = new \Application\Entity\Quote();
然后你正在使用
$form->bind($quote);
所以在为 $ quote 创建新对象时,您将获得空值。你在哪里使用
$form->bind($quote);
此函数假定值已存在于 $ quote(object)中。通过练习 Bind()通常用于编辑某种形式。
因此,如果你要添加一些东西,你必须进行获取/设置或使用 exchangearray()或w / e似乎没问题。但是如果您要编辑,那么您必须获得Id并执行类似的操作
$quote=$em(this is GetEntityManagerObject)->getRepository->find($id);
然后使用 bind()。使用这种方法,你不需要做 $ quote = new \ Application \ Entity \ Quote(); 。