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