Правильный способ получить данные модели внутри обратного вызова модели

Внутри afterSave, как лучше всего получить информацию о $this.

Например. Если я debug($this->read()), я получаю все, что мне нужно знать о текущей записи, с которой я работаю (связанные модели и т. д.).

array(
    'Comment' => array(
        'id' => '12',
        'user_id' => '38'
        'body' => 'test',
        'created' => '2013-04-11 18:56:26',
        'modified' => '2013-04-11 18:56:26'
    ),
    'User' => array(
        'password' => '*****',
        'id' => '38',
        'username' => 'example',
        'created' => '2013-01-26 18:25:39',
        'modified' => '2013-01-26 18:25:39',
        'first_name' => '',
        'last_name' => ''
    )
)

Но разве это не означает, что я снова запрашиваю БД? Разве $this не должна уже содержаться вся эта информация?

Как правильно получить результаты $this->read() или это правильный способ?


person vinhboy    schedule 11.04.2013    source источник


Ответы (2)


Это правильный способ ($this->read), зависящий от того, какую информацию вы хотите получить о записи, которую вы только что сохранили. Например, если вы выполняете вставку, а ваши $data (используемые как Comment->save($data)):

array(
    'Comment' => array(
        'id' => '12',
        'user_id' => '38'
        'body' => 'test',
        'created' => '2013-04-11 18:56:26',
        'modified' => '2013-04-11 18:56:26'
    ),
    'User' => array(
        'password' => '*****',
        'id' => '38',
        'username' => 'example',
        'created' => '2013-01-26 18:25:39',
        'modified' => '2013-01-26 18:25:39',
        'first_name' => '',
        'last_name' => ''
    )
)

и я имею в виду именно так, тогда $this->data все еще будет та же самая информация, которую вы только что сохранили. $this->data устанавливается в false только после afterSave.

Однако, если вы сделаете что-то вроде

$this->Comment->saveField('body', 'othertest');

массив $this->data в afterSave будет содержать только что-то вроде

Array
(
    [id] => 6
    [body] => 'othertest'
    [modified] => 2013-04-11 15:17:45
)

Другими словами, если вы хотите получить всю информацию, относящуюся к модели, независимо от данных, переданных в качестве параметра в save(), вам придется выполнить $this->read() ( или найти()).

person Nunser    schedule 11.04.2013

Вы должны иметь доступ к данным следующим образом:

public function afterSave($var = null){
    parent::afterSave($var);
    echo '<pre>';
    print_r($this->data);
    echo '</pre>';
    die();
}

Попробуйте этот код и просмотрите вывод. Это даст вам доступ к опубликованным данным, которые должны соответствовать записи, если сохранение прошло успешно. Также какую версию CakePHP вы используете и что вы пытаетесь сделать?

Хотя читать нормально.

person cnizzardini    schedule 11.04.2013