Обновление записи, но получение ее с чтением, отличным от идентификатора записи - PullRequest
0 голосов
/ 10 августа 2011

Мне нужно обновить модель, но искать модель, используя student_id вместо идентификатора самой модели.

Я придумал это решение, но мне было интересно, есть ли лучший способ сделать это?

if (!empty($this->data)) {

 // function that calculates score from answers in $this->data
        $score = $this->OnlineExam->checkAnswers(2,$this->data);    

        // find the record
        $record = $this->OnlineExam->find('first', array(
                                'conditions' => array('OnlineExam.student_id' => $this->Session->read('OnlineExam.studentId')),
                                'fields' => array('OnlineExam.id')));
        // set the id and the score in the data array
        $this->data['OnlineExam']['id'] = $record['OnlineExam']['id'];
        $this->data['OnlineExam']['scoreB'] = $score;

         // save the model
         if($this->OnlineExam->save($this->data)) {
            $this->redirect(array('controller' => 'OnlineExams', 'action' => 'page3'));             
         }

1 Ответ

1 голос
/ 10 августа 2011

Вы в значительной степени должны знать идентификатор записи, которую вы обновляете, и, если вы ее не знаете (т.е. она отсутствует в URL, данных POST или сеансе), единственный способ найти это - запрос (в вашем случае на student_id).

Единственные предложения, которые я могу придумать:

  • Не забывайте, что вы можете указать на запись, установив Model::id (при условии, что у вас еще нет клавиши id для ввода $this->data)
  • Если вы сохраняете только одно поле, вы можете использовать Model::saveField().

Код:

if (!empty($this->data)) {
    // function that calculates score from answers in $this->data
    $score = $this->OnlineExam->checkAnswers(2, $this->data);   
    // find the record
    $record = $this->OnlineExam->find('first', array(
        'conditions' => array('OnlineExam.student_id' => $this->Session->read('OnlineExam.studentId')),
        'fields' => array('OnlineExam.id')
    ));
    // set the id and save the score
    $this->OnlineExam->id = $record['OnlineExam']['id'];
    $saved = $this->OnlineExam->saveField('scoreB', $score);
    if ($saved) {
        $this->redirect(array('controller' => 'OnlineExams', 'action' => 'page3'));             
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...