0

フォームが更新ではなく行を挿入しようとする理由を理解しようとしていますが、手がかりがありません。コードは次のとおりです。

//This function is the one that displays the form
public function executeIndex(sfWebRequest $request) {

...

    $evrescrit = new Criteria();
    $evrescrit->addSelectColumn(EvaluacionResumenPeer::STATUS);
    $evrescrit->addSelectColumn(EvaluacionResumenPeer::RELEVANCE);
    $evrescrit->addSelectColumn(EvaluacionResumenPeer::QUALITY);
    $evrescrit->addSelectColumn(EvaluacionResumenPeer::COMMENT);
    $evrescrit->add(EvaluacionResumenPeer::RESUMEN_ID, $this->resumen->getId());

    $this->form = new EvaluacionResumenForm(EvaluacionResumenPeer::retrieveByPK($this->resumen->getId()), array('criteria' => $evrescrit));
    //$this->form = new EvaluacionResumenForm(EvaluacionResumenPeer::retrieveByPK($this->resumen->getId()));
}


 //The form, I'm using the Base but unsetting some columns, PK and FK.
class EvaluacionResumenForm extends BaseEvaluacionResumenForm {

public function configure() {
    unset(
            $this['created_at'], $this['updated_at'], $this['evaluador_id'], $this['resumen_id']
    );
}

}


//This is where the form submits
public function executeEdit(sfWebRequest $request) {

    $user = $this->getUser()->getGuardUser();
    $this->forward404Unless($user);
    $this->form = new EvaluacionResumenForm();

    if ($request->isMethod(sfRequest::POST)) {
        $this->processEdit($request, $this->form);
    }
}

public function processEdit(sfWebRequest $request, sfForm $form) {

    $this->form->bind($request->getParameter($form->getName()));
    //$this->form->bind($request->getPostParameter($request->getPostParameter('status')));

    $errors = $this->form->getErrorSchema()->getErrors();
    if (count($errors) > 0) {
        foreach ($errors as $name => $error) {
            echo $name . ': ' . $error . '<br>';
            echo $request->getParameter('evaluacion_resumen[resumen_id]');
        }
    }

    if ($this->form->isValid()) {
        $this->form->save();
        $this->getUser()->setFlash('notice', 'Sus modificaciones han sido grabadas.');
        $this->redirect('@resumenes_asignados');
    }
}

テンプレートでは、これを使用してフォームをレンダリングしています。

<?php echo $form->renderHiddenFields(); ?>
<?php echo $form; ?>

フォームを送信するときに発生するエラー (データベースから値を取得し、このフォームで更新する) は次のとおりです。

Unable to execute INSERT statement. [wrapped: SQLSTATE[HY000]: General error: 1452 Cannot add or update a child row: a foreign key constraint fails (`abstracts/evaluacion_resumen`, CONSTRAINT `evaluacion_resumen_FK_1` FOREIGN KEY (`resumen_id`) REFERENCES `resumen` (`id`))]

新しい行を挿入しようとする理由が本当にわかりません。既存の行を更新する必要があります。

ありがとう。

4

1 に答える 1