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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 29 май 2013, 09:21 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Еще раз здравствуйте. Пробую работать со связями таблиц через ORM. У меня есть 2 таблицы:
FIELDS: id, reference_id, type_id, name
и
DATA_TYPES: id, name, table_name

Есть две модели:
Код:
class Model_Fields extends ORM
{
   protected $_table_name = 'fields';
   protected $_primary_key = 'id';
   
   protected $_belongs_to = array(
      'datatype'   => array(
         'model'   => 'Datatypes',
         'foreign_key'   => 'type_id',
      ),
   );
}

Код:
class Model_Datatypes extends ORM
{
   protected $_table_name = 'data_types';
   protected $_primary_key = 'id';
}


А вот код при помощи которого я взаимодействую с таблицами:
Код:
$reference = ORM::factory('References')
   -> where('id', '=', 1)
   -> reset(FALSE)
   -> find();
      
$fields = ORM::factory('Fields')
   -> where('reference_id', '=', $reference -> id)
   -> reset(FALSE)
   -> find_all();      


Каким бы странным вам это не казалось, учитывая мою нубость в данном вопросе, все заработало с первого раза! Но, мне непонятно, как же все таки происходит связь. Почему? Потому что вот код последнего выполненного запроса, взял я его след. образом:
Код:
public function action_eav()
{
   $data = array();
   $data['reference_name'] = '';
   $data['fields_num'] = '';
   $reference = ORM::factory('References')
      -> where('id', '=', 1)
      -> reset(FALSE)
      -> find();
      
   $fields = ORM::factory('Fields')
      -> where('reference_id', '=', $reference -> id)
      -> reset(FALSE)
      -> find_all();
      
   $data['query'] = Database::instance()->last_query;
   $data['fields'] = $fields;
   $data['fields_num'] = count($fields);
   $data['reference_name'] = $reference -> name;
      
   $this->template->content = View::factory('test_eav', $data);
}

А вот и сам запрос:
Цитата:
SELECT `fields`.`id` AS `id`, `fields`.`reference_id` AS `reference_id`, `fields`.`type_id` AS `type_id`, `fields`.`name` AS `name` FROM `fields` AS `fields` WHERE `reference_id` = '1'

Выполняю его в phpmyadmin и получаю все записи (у меня их всего 2) и столбцы таблицы FIELDS как она есть:
id, reference_id, type_id, name
Вопрос: а как же происходит реляция?

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 май 2013, 14:10 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
напротив каждой строчки кода напиши что она делает и зачем ты используешь именно её, вчерашний метод лозаходца себя неплохо показал :D
http://kohana3.ru/module/orm читал? хотя если бы читал то такой бурды не писал ((( надоело уже

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 июн 2013, 18:43 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 03 июн 2013, 00:18
Сообщения: 32
Вот это вот что делает в коде ? Обращение к модели References, которой у тебя нет.
Код:
$reference = ORM::factory('References')


И зачем reset(false) везде ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 июн 2013, 10:18 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Есть модель References, я просто не привел её здесь потому что в разрезе данного топика её рассмотрение не требуется. reset(false) это чтоб условия выборки не сбрасывались.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 июн 2013, 13:41 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
а зачем если у тебя по 1 запросу к каждой модели?

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


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

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


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

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


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

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