1

ZF2 コントローラの 1 つで作業中に、次のエラーが発生しました。

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()returnの場合true、DB はエラーを返します...なぜ値が NULL なのですか?

これが私のコントローラーコードです: http://pastebin.com/JVK5xE9r

ここに私のエンティティがあります: http://pastebin.com/NhtaBNW9

これが私のものAbstractEntityです:http://pastebin.com/s4L7Cquu

ここに私のフォームがあります: http://pastebin.com/t7Kmzfk5

これが私のものAbstractFormです:http://pastebin.com/36WeyKBf

質問に含めるにはコードが多すぎます。

メソッドはget()エンティティに対してset()も機能します。しかし、それが私が持っている唯一の問題です!だから私は理由を知りたいです。

うまくいかない理由を誰かに教えてもらえたら、それは素晴らしいことです。

4

1 に答える 1

2

ああ、私はあなたが今直面していることを理解していると思います、あなたがしていることは

 $quote = new \Application\Entity\Quote();

そして、あなたは使用しています

$form->bind($quote);

$quoteの新しいオブジェクトを作成すると、空の値が得られます。使用している場所

 $form->bind($quote);

この関数は、値が$quote (object)に既に存在することを前提としています。実際には、 Bind() は通常、何らかのフォームの編集で使用されます。

したがって、何かを追加する場合は、Get/Set またはExchangearray()を使用する必要があります。ただし、編集する場合は、ID を取得して次のようにする必要があります。

 $quote=$em(this is GetEntityManagerObject)->getRepository->find($id);

そしてbind()を使用します。このアプローチでは、$quote = new \Application\Entity\Quote();を実行する必要はありません。.

于 2013-07-25T02:32:57.170 に答える