CakePHP: поиск данных после сохранения

Я работаю над методом редактирования. После сохранения данных отправляется электронное письмо с изменениями, внесенными во время редактирования. Все работает, кроме одного бешеного, но решающего бага. Вот это очень просто:

$data = $this->SupportTicket->readForView($st_id);
$this->SupportTicket->id = $st_id;
if ($this->SupportTicket->save($this->request->data)) {

    //call custom model method to pull view data
    $data = $this->SupportTicket->readForView($st_id);
    //do something with this data

}

Проблема в том, что $data выходит с данными предварительного сохранения. То, что я тогда пытаюсь сделать с новыми данными, не работает. Я не могу просто использовать $this->request->data, потому что в нем нет полных данных, которые мне нужны.

Однако сохранение работает. Если я обновлю метод представления для той же записи, он будет показан как обновленный. Так что это сохранение, но когда я делаю поиск после сохранения, это дает мне старые данные.

Есть идеи?

Обновление: это не происходит с findById($st_id), поэтому это должно быть связано с моим пользовательским методом. Код:

public function readForView($id)
{
    $data = $this->find('first', array(
        'conditions' => array(
            'SupportTicket.id' => $id
        ),
        'contain' => array(
            'User',
            'Owner'
        )
    ));

    if (empty($data)) {
        throw new notFoundException('Ticket not found');
    }

    $data['SupportTicket']['type_long'] = $this->getLongType($data['SupportTicket']['type']);
    $data['SupportTicket']['status_long'] = $this->getLongStatus($data['SupportTicket']['status']);
    $data['SupportTicket']['name'] = 'Support Ticket #' . $data['SupportTicket']['id'] . ' - ' . $data['SupportTicket']['title'];

    return $data;
}

Копирование кода из этого метода в контроллер дает тот же результат.

2 ответа

Я нашел это полезным: https://edivad.wordpress.com/2008/04/15/cakephp-disable-model-queries-caching/

По модели:

class Project extends AppModel {
    var $cacheQueries = false;
...

По функции:

function someFunction {
  $this->Model->cacheQueries = false;
...

Попробуйте использовать последнюю вставку ID

$ ID =$this->getLastInsertID();

публичная функция readForView($id)

Другие вопросы по тегам