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

Не понимаю, как происходит связь между таблицами.
http://forum.kohanaframework.su/viewtopic.php?f=33&t=660
Страница 1 из 1

Автор:  nkl [ 29 май 2013, 09:21 ]
Заголовок сообщения:  Не понимаю, как происходит связь между таблицами.

Еще раз здравствуйте. Пробую работать со связями таблиц через 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
Вопрос: а как же происходит реляция?

Автор:  WinterSilence [ 29 май 2013, 14:10 ]
Заголовок сообщения:  Re: Не понимаю, как происходит связь между таблицами.

напротив каждой строчки кода напиши что она делает и зачем ты используешь именно её, вчерашний метод лозаходца себя неплохо показал :D
http://kohana3.ru/module/orm читал? хотя если бы читал то такой бурды не писал ((( надоело уже

Автор:  slider23 [ 03 июн 2013, 18:43 ]
Заголовок сообщения:  Re: Не понимаю, как происходит связь между таблицами.

Вот это вот что делает в коде ? Обращение к модели References, которой у тебя нет.
Код:
$reference = ORM::factory('References')


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

Автор:  nkl [ 04 июн 2013, 10:18 ]
Заголовок сообщения:  Re: Не понимаю, как происходит связь между таблицами.

Есть модель References, я просто не привел её здесь потому что в разрезе данного топика её рассмотрение не требуется. reset(false) это чтоб условия выборки не сбрасывались.

Автор:  WinterSilence [ 04 июн 2013, 13:41 ]
Заголовок сообщения:  Re: Не понимаю, как происходит связь между таблицами.

а зачем если у тебя по 1 запросу к каждой модели?

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