Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 28 апр 2024, 03:43

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Что возвращает ->loaded()?
СообщениеДобавлено: 24 май 2013, 10:31 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Собственно почему возник такой вопрос:
Код:
         $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 строки. Что я опять не так делаю?

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что возвращает ->loaded()?
СообщениеДобавлено: 24 май 2013, 11:08 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Странный вообще этот 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

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

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что возвращает ->loaded()?
СообщениеДобавлено: 24 май 2013, 11:13 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Сделать так:
Код:
         $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;

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что возвращает ->loaded()?
СообщениеДобавлено: 24 май 2013, 21:57 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Код:
$fields = ORM::factory('Fields')
            -> where('reference_id', '=', $reference_id)
            -> find_all();

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что возвращает ->loaded()?
СообщениеДобавлено: 26 май 2013, 03:09 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
То что вы дали не работает. Тот код, что я уже на ваял я не стал переделывать и поэтому даже не проверил приведенный вами пример. Но в следующем методе решил воспользоваться вашим примером, пишу:
Код:
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


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

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что возвращает ->loaded()?
СообщениеДобавлено: 26 май 2013, 03:20 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
А если написать вместо:
Код:
-> 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() не работает?

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что возвращает ->loaded()?
СообщениеДобавлено: 26 май 2013, 12:35 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
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(), а для другого нет?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 89


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group