Выше мы упоминали о том, что в реляционном запросе можно указать дополнительные параметры. Эти параметры — пары имя-значение — используются для тонкой настройки реляционного запроса. Список параметров представлен ниже.
select: список выбираемых полей для связанного AR-класса. По умолчанию значение параметра равно '*', что соответствует всем полям таблицы. Для используемых столбцов должны быть разрешены конфликты имён.
condition: соответствует SQL оператору WHERE, по умолчанию значение параметра пустое. Для используемых столбцов должны быть разрешены конфликты имён.
params: параметры для связывания в генерируемом SQL-выражении. Параметры передаются как массив пар имя-значение.
on: соответствует SQL оператору ON. Условие, указанное в этом параметре, будет добавлено к основному условию соединения при помощи SQL оператора AND. Для используемых столбцов должны быть разрешены конфликты имён. Данный параметр неприменим для связей типа MANY_MANY.
order: соответствует SQL оператору ORDER BY, по умолчанию значение параметра пустое. Для используемых столбцов должны быть разрешены конфликты имён.
with: список дочерних связанных объектов, которые должны быть загружены с самим объектом. Неправильное использование данной возможности может привести к бесконечному циклу.
joinType: тип соединения таблиц. По умолчанию значение параметра равно LEFT OUTER JOIN;
alias: псевдоним таблицы, ассоциированной со связью. По умолчанию значение параметра равняется null, что означает, что псевдоним соответствует имени связи.
together: параметр, устанавливающий необходимость принудительного соединения таблицы, ассоциированной с этой связью, с другими таблицами. Этот параметр имеет смысл только для связей типов HAS_MANY и MANY_MANY. Если параметр не установлен или равен false, тогда каждая связь HAS_MANY или MANY_MANY будет использовать отдельный SQL-запрос для связанных данных, что может улучшить скорость выполнения запроса, т.к. уменьшается количество выбираемых данных. Если параметр равен true, то зависимая таблица при выполнении запроса всегда будет соединяться с основной, то есть будет выполнен один SQL-запрос даже в том случае, если к основной таблице применяется постраничная разбивка. Если данный параметр не задан, зависимая таблица будет соединена с основной только в случае, когда к основной таблице не применяется постраничная разбивка. Более подробное описание можно найти в разделе «производительность реляционного запроса».
join: дополнительный оператор JOIN. По умолчанию пуст. Этот параметр доступен с версии 1.1.3.
group: соответствует SQL оператору GROUP BY, по умолчанию значение параметра пустое. Для используемых столбцов должны быть разрешены конфликты имён.
having: соответствует SQL оператору HAVING, по умолчанию значение параметра пустое. Для используемых столбцов должны быть разрешены конфликты имён.
index: имя столбца таблицы, значения которого должны быть использованы в качестве ключей массива, хранящего связанные объекты. Без установки этого параметра массив связанных объектов использует целочисленный индекс, начинающийся с нуля. Параметр может быть установлен только для связей типа HAS_MANY и MANY_MANY.
scopes: группы условий, которые необходимо применить. В случае одной группы может задаваться в виде строки 'scopes'=>'scopeName'. Если же групп несколько, то их необходимо перечислить в массиве 'scopes'=>array('scopeName1','scopeName2'). Этот параметр доступен с версии 1.1.9.
Кроме того, для отложенной загрузки некоторых типов связей доступен ряд дополнительных параметров:
limit: параметр для ограничения количества строк в выборке. Параметр неприменим для связей BELONGS_TO;
offset: параметр для указания начальной строки выборки. Параметр неприменим для связей BELONGS_TO.
through: имя связи модели, которое при получении данных будет использоваться как мост. Параметр может быть установлен только для связей HAS_ONE и HAS_MANY. Этот параметр доступен с версии 1.1.7.
Ниже мы изменим определение связи posts в модели User, добавив несколько вышеприведенных параметров:
Теперь при обращении к $author->posts, мы получим записи автора, отсортированные в обратном порядке по времени их создания. Для каждой записи будут загружены её категории.
5. Устранение конфликта имён столбцов
При совпадении имён столбцов в двух и более соединяемых таблицах, приходится разрешать конфликт имён. Это делается при помощи добавления псевдонима таблицы к имени столбца.
В реляционном запросе псевдоним главной таблицы всегда равен t, а псевдоним связанной таблицы по умолчанию равен имени связи. В приведённом ниже коде псевдонимы таблиц для моделей Post и Comment будут соответственно t и comments:
Допустим, что и в Post, и в Comment есть столбец create_time, в котором хранится время создания записи или комментария, и нам необходимо получить записи вместе с комментариями к ним, отсортированные сначала по времени создания записи, а затем по времени написания комментария. Для этого нам понадобится устранить конфликт столбцов create_time следующим образом:
lektsii.net - Лекции.Нет - 2014-2025 год. (0.007 сек.)
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав