Обновление Kohana ORM не работает - PullRequest
2 голосов
/ 15 июня 2011

Я обнаружил Kohana всего 2 дня назад и, столкнувшись с несколькими проблемами и сумев с ними справиться, я столкнулся с довольно странной.Когда я пытаюсь обновить запись в БД, вместо обновления записи ORM просто вставляет новую строку.Все похоже на этот пример http://kohanaframework.org/3.0/guide/orm/examples/simple
Мой код (файл контроллера):

class Controller_Admin extends Controller {
   ...
   public function action_test($id)
   {
      $inquiry = ORM::factory('inquiry')->where('Id', '=', $id)->find(); // $inquiry  = Model_Inquiry($id) doesn't work, too
      $inquiry ->Name = 'Someone';
      $inquiry ->save();
   }
   ...
}

Файл модели:

class Model_Inquiry extends ORM
{
    protected $_table_name = 'mytable';
}   

У вас есть идеи, почему он вставляет новыйзапись вместо обновления старой?Я прочитал, что это потому, что идентификатор не установлен правильно, но я попытался использовать фиксированное значение (-> где ('Id', '=', 5)), и он не работал (он все еще вставил новую строку).

Заранее спасибо!

1 Ответ

2 голосов
/ 15 июня 2011

Ваша запись не загружается в первую очередь. Чтобы проверить, загружен ли он, выполните:

if ($inquiry->loaded()){...

Кроме того, вы можете проверить, какой запрос был выполнен, выполнив:

echo $inquiry->last_query();

Таким образом, вы можете вручную проверить, что именно возвращается в ORM.

Основная проблема здесь в том, что вы используете save() вместо того, чтобы быть более строгим и использовать create() / update(). Если вы используете update(), ORM выдаст исключение с жалобой на то, что запись не загружается.

Сохранить - это, по сути, прокси для этих методов, полагаясь на загруженное состояние.

(я предполагаю, что вы используете Kohana 3.1, поскольку в версии 3.0 ORM вообще не имеет отдельных методов обновления / создания)

...