Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Установка связей между AR-классами

Читайте также:
  1. IX Международный асинхронный турнир «Золотая осень» завершен!
  2. IX. Произнесите слова, соблюдая различие между звуками по степени открытости.
  3. Uuml;1. Возможность совмещения реагирующих между собой ингредиентов.
  4. XI Международный фестиваль - конкурс
  5. А есть связь между вашими картинами, книгой и песнями?
  6. Алмазы, «международный терроризм» и новые способы управления глобальными рынками
  7. АНТАГОНИЗМ МЕЖДУ НОВОЙ И ДРЕВНЕЙ КОРОЙ
  8. Аратта междуречья Дуная и Днепра
  9. Ая основа – Хаджури не видит разницы между нововведенцем, призывающим к своему нововведению, и не призывающим, и пример в этом он взял с Махмуда Хаддада.
  10. Большое поле для международной координации

Реляционная Active Record

Мы уже рассмотрели использование Active Record (AR) для выбора данных из одной таблицы базы данных. В этом разделе мы расскажем, как использовать AR для соединения нескольких связанных таблиц и получения набора связанных данных.

Перед использованием реляционной AR рекомендуется установить ограничения внешних ключей для таблиц базы данных. Это позволит обеспечить непротиворечивость и целостность хранимых данных.

Для наглядности примеров в этом разделе мы будем использовать схему базы данных, представленную на следующей диаграмме сущность-связь (ER).

Диаграмма ER

Информация: Поддержка ограничений внешних ключей различается в разных СУБД. SQLite < 3.6.19 не поддерживает ограничений, но вы, тем не менее, можете их объявить при создании таблиц. Движок MySQL MyISAM не поддерживает внешние ключи.

Установка связей между AR-классами

Перед тем как использовать AR для выполнения реляционных запросов, нам необходимо установить связи между AR-классами.

Связь между двумя AR-классами напрямую зависит от связей между соответствующими таблицами базы данных. С точки зрения БД, связь между таблицами A и В может быть трёх типов: один-ко-многим (например, tbl_user и tbl_post), один-к-одному (например, tbl_user и tbl_profile) и многие-ко-многим (например, tbl_category и tbl_post). В AR существует четыре типа связей:

Установка связей производится внутри метода relations() класса CActiveRecord. Этот метод возвращает массив с конфигурацией связей. Каждый элемент массива представляет одну связь в следующем формате:

'VarName'=>array('RelationType', 'ClassName', 'ForeignKey', …дополнительные параметры)

где VarName — имя связи, RelationType указывает на один из четырёх типов связей, ClassName — имя AR-класса, связанного с данным классом, а ForeignKey обозначает один или несколько внешних ключей, используемых для связи. Кроме того, можно указать ряд дополнительных параметров, о которых будет рассказано позже.

В приведённом ниже коде показано, как установить связь между классами User и Post.

class Post extends CActiveRecord

{

public function relations()

{

return array(

'author'=>array(self::BELONGS_TO, 'User', 'author_id'),

'categories'=>array(self::MANY_MANY, 'Category',

'tbl_post_category(post_id, category_id)'),

);

}

}

 

class User extends CActiveRecord

{

public function relations()

{

return array(

'posts'=>array(self::HAS_MANY, 'Post', 'author_id'),

'profile'=>array(self::HAS_ONE, 'Profile', 'owner_id'),

);

}

}

Информация: Внешний ключ может быть составным, то есть состоять из двух и более столбцов таблицы. В этом случае имена столбцов следует разделить запятыми и передать их либо в качестве строки, либо в виде массива array('key1','key2'). Задать свою связь первичного ключа с внешним можно в виде массива array('fk'=>'pk'). Для составных ключей это будет array('fk_c1'=>'pk_c1','fk_c2'=>'pk_c2'). Для типа связи MANY_MANY имя ассоциативной таблицы также должно быть указано во внешнем ключе. Например, связи categories модели Post соответствует внешний ключ tbl_post_category(post_id, category_id). Для каждой добавленной связи неявно создаётся свойство класса. После выполнения реляционного запроса соответствующее свойство будет содержать связанный экземпляр класса AR (или массив экземпляров для связей типа один-ко-многим и многие-ко-многим). Например, если $author является экземпляром AR-класса User, то можно использовать $author->posts для доступа к связанным экземплярам Post.




Дата добавления: 2015-09-10; просмотров: 101 | Поможем написать вашу работу | Нарушение авторских прав

Параметры реляционного запроса | Статистический запрос | Реляционные запросы с именованными группами условий | Reflexives | Adjectives | Volunteer: ??? | Project description |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав