Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Опять непонятки с этим ОРМ!
http://forum.kohanaframework.su/viewtopic.php?f=33&t=652
Страница 1 из 1

Автор:  nkl [ 22 май 2013, 14:49 ]
Заголовок сообщения:  Опять непонятки с этим ОРМ!

Вот код:
Код:
public function name_unique($reference_name)
   {
      $referencetemp = ORM::factory('Reference')
         -> where('name', '=', $reference_name)
         -> reset(FALSE)
         -> find_all();
      
      if($referencetemp -> loaded())
      {
         return FALSE;
      }
      else
      {
         return TRUE;
      }
   }

Кохана выдает шибку:
Цитата:
ErrorException [ Fatal Error ]: Call to undefined method Database_MySQL_Result::loaded()
APPPATH/classes/Model/Reference.php [ 24 ]
19 $referencetemp = ORM::factory('Reference')
20 -> where('name', '=', $reference_name)
21 -> reset(FALSE)
22 -> find_all();
23
24 if($referencetemp -> loaded())
25 {
26 return FALSE;
27 }
28 else
29 {
{PHP internal call} » Kohana_Core::shutdown_handler()

В чем проблема?

Автор:  WinterSilence [ 22 май 2013, 15:20 ]
Заголовок сообщения:  Re: Опять непонятки с этим ОРМ!

что возвращает find_all() по твоему?

Автор:  nkl [ 23 май 2013, 10:36 ]
Заголовок сообщения:  Re: Опять непонятки с этим ОРМ!

Спасибо за наводку, что б я без Вас делал WinterSilence!
Но опять проблема! Теперь запись не хочет обновляться! Вот код:
Код:
// Метод для редактирования справочника
   public function edit_reference($reference_id, $new_reference_name, $new_reference_description)
   {
      $editreference = ORM::factory('Reference')
         -> where('id', '=', $reference_id)
         -> reset(FALSE);
         
      $editreference -> name = $new_reference_name;
      $editreference -> description = $new_reference_description;
      
      try
      {
         $editreference -> save();
         return TRUE;
      }
      catch(ORM_Validation_Exception $e)
      {
         $this->errors = $e->errors('validation');
         return FALSE;
      }
      $this -> result = 'Последний вызванный метод edit_reference';
   }

В $reference_id передается айдишник справочника,
$new_reference_name - новое название справочника,
$new_reference_description новое описание справочника.

Код
Код:
$editreference = ORM::factory('Reference')
         -> where('id', '=', $reference_id)
         -> reset(FALSE);

выбирает нужный справочник, а
Код:
try
      {
         $editreference -> save();
         return TRUE;
      }
      catch(ORM_Validation_Exception $e)
      {
         $this->errors = $e->errors('validation');
         return FALSE;
      }


Сохраняет запись с новыми значениями.
В итоге, создается новая запись, вместо изменения старой. Что я делаю не так?

Автор:  WinterSilence [ 23 май 2013, 10:51 ]
Заголовок сообщения:  Re: Опять непонятки с этим ОРМ!

ты не читаешь мануалы как всегда, иначе ты бы знал почему не рекомендуют использовать save. и кстати если уж ты разорался для каких целей используется loaded() ?

Автор:  nkl [ 23 май 2013, 11:09 ]
Заголовок сообщения:  Re: Опять непонятки с этим ОРМ!

Изменил строку:
Код:
$editreference -> save();

На
Код:
$editreference -> update();


Теперь выдает такую ошибку:
Цитата:
Cannot update reference model because it is not loaded.


Странно, видимо запись не получает. Буду разбираться...

Автор:  nkl [ 23 май 2013, 14:36 ]
Заголовок сообщения:  Re: Опять непонятки с этим ОРМ!

loaded() проверят были ли загружены данные из БД. В общем разобрался. Все работает. Метод выглядит так:
Код:
// Метод для редактирования справочника
   public function edit_reference($reference_id, $new_reference_name, $new_reference_description)
   {
      $editreference = ORM::factory('Reference')
         -> where('id', '=', $reference_id)
         -> reset(FALSE)
         -> find();
   
      $editreference -> name = $new_reference_name;
      $editreference -> description = $new_reference_description;
      
      try
      {
         $editreference -> update();
         $this -> new_name = $new_reference_name;
         $this -> new_description = $new_reference_description;
         return TRUE;
      }
      catch(ORM_Validation_Exception $e)
      {
         $this->errors = $e->errors('validation');
         return FALSE;
      }
   }

Страница 1 из 1 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/