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

Что возвращает ->loaded()?
http://forum.kohanaframework.su/viewtopic.php?f=31&t=655
Страница 1 из 1

Автор:  nkl [ 24 май 2013, 10:31 ]
Заголовок сообщения:  Что возвращает ->loaded()?

Собственно почему возник такой вопрос:
Код:
         $reference = ORM::factory('Reference')
            -> where('id', '=', $reference_id)
            -> find();
            
         $fields = ORM::factory('Fields')
            -> where('reference_id', '=', $reference_id);
            
         $data['fields_num'] = $fields -> count_all();
         
         if($fields -> loaded())
         {
            $fields -> find_all();
         }
         else
         {
            $data['errors']['non_fields'] = '';
         }

Почему-то выполняется то, что стоит в блоке else. По условию, должно быть наоборот, если данные были загружены if($fields -> loaded()), то должно произойти $fields -> find_all();. Хотя:
Код:
$data['fields_num'] = $fields -> count_all();

Возвращает 2, т.е. по этому условию выбирается 2 строки. Что я опять не так делаю?

Автор:  nkl [ 24 май 2013, 11:08 ]
Заголовок сообщения:  Re: Что возвращает ->loaded()?

Странный вообще этот ORM какой-то! Пишу так:
Код:
         $reference = ORM::factory('Reference')
            -> where('id', '=', $reference_id)
            -> find();
            
         $fields = ORM::factory('Fields', array('reference_id' => $reference_id));
         
         $data['fields_num'] = $fields -> count_all();
         
         if($fields -> loaded())
         {
            /*$fields -> find_all();*/
         }
         else
         {
            $data['errors']['non_fields'] = '';
         }
         
         $data['reference_name'] = $reference -> name;
         $data['fields'] = $fields;

Условие работает нормально. Но невозможно потом выполнить
Код:
$fields -> find_all();

Говорит, типа
Цитата:
Method find_all() cannot be called on loaded objects

Мне что теперь опять запрос делать??? Что за глупость? Разве что...

Автор:  nkl [ 24 май 2013, 11:13 ]
Заголовок сообщения:  Re: Что возвращает ->loaded()?

Сделать так:
Код:
         $reference = ORM::factory('Reference')
            -> where('id', '=', $reference_id)
            -> find();
            
         $fields = ORM::factory('Fields')
            -> where('reference_id', '=', $reference_id)
            -> find_all();
            
         $data['fields_num'] = count($fields);
         
         if($data['fields_num'] == 0)
         {
            $data['errors']['non_fields'] = '';
         }
         
         $data['reference_name'] = $reference -> name;
         $data['fields'] = $fields;

Автор:  Sergey [ 24 май 2013, 21:57 ]
Заголовок сообщения:  Re: Что возвращает ->loaded()?

Код:
$fields = ORM::factory('Fields')
            -> where('reference_id', '=', $reference_id)
            -> find_all();

if(
$fields -> loaded())
{
    // ...
} 


Учите матчасть

Автор:  nkl [ 26 май 2013, 03:09 ]
Заголовок сообщения:  Re: Что возвращает ->loaded()?

То что вы дали не работает. Тот код, что я уже на ваял я не стал переделывать и поэтому даже не проверил приведенный вами пример. Но в следующем методе решил воспользоваться вашим примером, пишу:
Код:
public function get_field($reference_id)
   {
      $this -> result = 'Последний вызванный метод create_field';
      
      $fields = ORM::factory('Fields')
         -> where('reference_id', '=', $reference_id)
         -> find_all();
      
      if($fields -> loaded())
      {
         $this -> fields = $fields;
         return TRUE;
      }
      else
      {
         return FALSE;
      }
   }

А оно ругается, говорит, что:
Цитата:
ErrorException [ Fatal Error ]: Call to undefined method Database_MySQL_Result::loaded()
APPPATH/classes/Model/Eav.php [ 97 ]
92
93 $fields = ORM::factory('Fields')
94 -> where('reference_id', '=', $reference_id)
95 -> find_all();
96
97 if($fields -> loaded())
98 {
99 $this -> fields = $fields;
100 return TRUE;
101 }
102 else
{PHP internal call} » Kohana_Core::shutdown_handler()
Environment


Какую еще можно матчасть учить я уже и не знаю. Все вроде правильно, ан не работает!

Автор:  nkl [ 26 май 2013, 03:20 ]
Заголовок сообщения:  Re: Что возвращает ->loaded()?

А если написать вместо:
Код:
-> find_all();

просто:
Код:
-> find();

То все как бы норм, ошибки не возникает и метод возвращает TRUE.
P.S.
Вот запрос, который генерирует ORM:
Цитата:
SELECT `fields`.`id` AS `id`, `fields`.`reference_id` AS `reference_id`, `fields`.`name` AS `name` FROM `fields` AS `fields` WHERE `reference_id` = '6'

А результатом ентого запроса является 2 строки. Так почему же -> loaded() не работает?

Автор:  Sergey [ 26 май 2013, 12:35 ]
Заголовок сообщения:  Re: Что возвращает ->loaded()?

nkl писал(а):
А если написать вместо:
Код:
-> find_all();

просто:
Код:
-> find();

То все как бы норм, ошибки не возникает и метод возвращает TRUE.
P.S.
Вот запрос, который генерирует ORM:
Цитата:
SELECT `fields`.`id` AS `id`, `fields`.`reference_id` AS `reference_id`, `fields`.`name` AS `name` FROM `fields` AS `fields` WHERE `reference_id` = '6'

А результатом ентого запроса является 2 строки. Так почему же -> loaded() не работает?


Ну да, я печатался, не find_all() а find(). Вы вообще не знаете матчасти? Просто вы такие вопросы задаёте... А вы не пробовали открыть класс и посмотреть своими глазами на разницу методов, почему для одного применимо loaded(), а для другого нет?

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