Сохранение модели CakePHP () не завершено вовремя? - PullRequest
0 голосов
/ 11 ноября 2010

Я использую CakePHP 1.3 с MySQL и работаю в тесном цикле с кодом, подобным:

if ($this->Model->find('count', array('conditions' => array('Model.name' => 'name'))) == 0)
{
    $this->Model->create();
    $this->Model->save(array('Model' => array('name' => 'name')));
}

$data = $this->Model->find('first', array('conditions' => array('Model.name' => 'name')));

Однако иногда $ data оказывается NULL;другими словами, запись не существует, даже если я создаю / сохраняю новую запись, если она не существует для начала.

Существует ли некоторая задержка между временем создания записи и моментом ее создания?доступна?

Любая помощь очень ценится.

РЕДАКТИРОВАТЬ 1 Я должен отметить, что я уверен, что вызов Model-> save () завершится успешно, прежде чем продолжить,

if (!$this->Model->save(array('Model' => array('name' => 'name'))))
    $this->error('Save failed');

Спасибо.

Ответы [ 3 ]

0 голосов
/ 11 ноября 2010

Вы всегда можете немного переписать свой код:

if ($this->Model->find('count', array('conditions' => array('Model.name' => 'name'))) == 0)
  {
  $this->Model->create();
  if ($this->Model->save(array('Model' => array('name' => 'name'))))
    {
    $data = $this->Model->find('first', array('conditions' => array('Model.name' => 'name')));
    /* or better: */
    $data = $this->Model->findByName('name');
    /* or rather use: */
    $data = $this->Model->find('first', array('conditions' => array('Model.id' => $this->Model->id)));
    /* or even better, try this: */
    $data = $this->Model->read();
    }
  }
0 голосов
/ 11 ноября 2010

Может быть, у вас есть какие-то правила проверки, которые мешают сохранить, попробуйте это

if (!$this->Model->save(array('Model' => array('name' => 'name')))) {
    pr($this->Model->validationErrors);
}

, если pr () что-то показывает, то вы найдете проблему

0 голосов
/ 11 ноября 2010

Я так не думаю, на уровне MySQL всякий раз, когда вставка завершается, вновь созданная запись может использоваться мгновенно.Я использую MySQL в течение многих лет, и у меня никогда не было этой проблемы.Насколько я знаю, команды добавляются в очередь и по умолчанию выполняются в системе FIFO (First In First Out).

...