0

複数の値を返すフォームがあり、それぞれの値をデータベースに保存したいのですが、

この目的のためにテストフォームを作成しました

<form method="post" action="{{ path('submit_exercise', {'page': 1}) }}">
    <input type="hidden" name="answers[]" value="Answer 1" "/>
    <input type="hidden" name="answers[]" value="Answer 2" "/>
    <input type="hidden" name="answers[]" value="Answer 3" "/>
    <input type="hidden" name="answers[]" value="Answer 4" "/>
    <input type="hidden" name="answers[]" value="Answer 5" "/>
    <input type="hidden" name="answers[]" value="Answer 6" "/>
    <input type="hidden" name="answers[]" value="Answer 7" "/>
    <input type="submit" name="submit" />
</form>
</body>
</html>

私の回答の提出アクションは現在そのように書かれています。

public function submitAnswersAction($page)
{
    //get submitted data
    $data = $this->get('request')->request->all();
    $answers = $data['answers'];

    //get student ID
    $user = $this->get('security.context')->getToken()->getUser();
    $studentID = $user->getId();

    //Get Current time
    $currentTime = new \DateTime(date("Y-m-d H:m:s"));


    //var_dump($answers);
    //var_dump($studentID);
    //var_dump($currentTime);

    for($index = 0; $index < count($answers); $index++)
    {
        /*echo "Question ". ($index + 1) ."<br />";
        echo "Student ID: ". $studentID."<br />";
        echo "Page Number: $page <br />";
        echo "Answer: $answers[$index]"."<br />";
        echo "<br />";*/

        $studentAnswer = new StudentAnswer();
        $studentAnswer->setStudentID($studentID);
        $studentAnswer->setPageID($page);
        $studentAnswer->setQuestionID($index+1);
        $studentAnswer->setAnswer($answers[$index]);
        $studentAnswer->setDateCreated($currentTime);
        $studentAnswer->setReadStatus(0);

        $database = $this->getDoctrine()->getManager();
        $database->persist($studentAnswer);
        $database->flush();

    }

    return new Response('Answers saved for Student: '.$user->getFullName().' for page: '.$page);

var_dump を実行すると、すべてが正しく関連付けられているように見えます。つまり、answers 配列に適切なデータが取り込まれ、他のすべての変数もそうであることを意味します。私の問題は、実際にはそれをデータベースに永続化することです。実行すると、このエラーが返されますが、行に入れる変数がわからないようです。

An exception occurred while executing 'INSERT INTO Student_Answer (student_id, page_id, question_id, answer, read, date_created) VALUES (?, ?, ?, ?, ?, ?)' with params {"1":2,"2":"1","3":1,"4":"Answer 1","5":0,"6":"2012-12-11 12:12:20"}:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'read, date_created) VALUES (2, 1, 1, 'Answer 1', 0, '2012-12-11 15:12:51')' at line 1

これは Web 開発をもう少し理解しようとする個人的なプロジェクトであるため、どんな助けも大歓迎です。

4

2 に答える 2

4

問題が何であるかわかりません。いくつかのこと:

それはループの前に行きます:

$database = $this->getDoctrine()->getManager();

$em または $entityManager である必要があります (そのように呼び出されるため...)

ループの後に呼び出す必要があります。

$database->flush();

Doctrine2 でデータベースに保存された ID を扱う必要はありません。だからこれをしないでください:

$studentAnswer->setStudentID($studentID);

代わりにこれを行います:

$studentAnswer->setStudent($student);
于 2012-12-11T05:27:31.147 に答える
1

わあ大丈夫、それでこの問題はSymfonyやDoctrineとはまったく関係がありませんでした

問題は基本的にreadフィールドでした。SQLのキーワードであると考えているため、列のフィールド名ではなくキーワードとして読み取られます。名前を変更する必要がありましたis_read

于 2012-12-11T10:40:19.587 に答える