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

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

Реляционные запросы с именованными группами условий

Читайте также:
  1. Анализ результатов государственной экспертизы условий труда
  2. Анализ условий труда специалиста на рабочем месте.
  3. Анализ условий труда, травматизма и профзаболеваний.
  4. Ваш компьютер зависает или перестает отвечать на запросы и отображает черный экран
  5. Влияние условий эксплуатации в сельском хозяйстве на техническое состояние машин.
  6. Выбор числа котлов с учётом условий их работы в неотопительном периоде и требований аварийного резервирования
  7. Государственная экспертиза условий труда
  8. Запросы беременного омеги или «веселые» дни Занзаса.
  9. И условий труда на состояние человека
  10. Кислотные свойства органических соединений с водородосодержащими функциональными группами (спирты, фенолы, тиолы, карбоновые кислоты, амины).

В реляционном запросе именованные группы условий могут быть использованы двумя способами. Их можно применить к основной модели и к связанным моделям.

Следующий код иллюстрирует случай их применения к основной модели:

$posts=Post::model()->published()->recently()->with('comments')->findAll();

Данный код очень похож на нереляционный запрос. Единственное отличие состоит в том, что присутствует вызов with() после вызовов групп условий. Данный запрос вернёт недавно опубликованные записи вместе с комментариями к ним.

В следующем примере показано, как применить группы условий к связанным моделям:

$posts=Post::model()->with('comments:recently:approved')->findAll();

// или, начиная с версии 1.1.7

$posts=Post::model()->with(array(

'comments'=>array(

'scopes'=>array('recently','approved')

),

))->findAll();

// или, начиная с версии 1.1.7

$posts=Post::model()->findAll(array(

'with'=>array(

'comments'=>array(

'scopes'=>array('recently','approved')

),

),

));

Этот запрос вернёт все записи вместе с одобренными комментариями. Здесь comments соответствует имени связи. recently и approved — именованные группы, описанные в модели Comment. Имя связи и группы условий разделяются двоеточием.

Вам может понадобится использовать вместо жадной выборку отложенную для связи с группой условий. Синтаксис для этого такой:

// имя связи comments повторяется два раза

$approvedComments = $post->comments('comments:approved');

Именованные группы могут быть использованы при описании связей модели в методе CActiveRecord::relations() в параметре with. В следующем примере при обращении к $user->posts вместе с публикациями будут получены все одобренные комментарии.

class User extends CActiveRecord

{

public function relations()

{

return array(

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

'with'=>'comments:approved'),

);

}

}

// или, начиная с версии 1.1.7

class User extends CActiveRecord

{

public function relations()

{

return array(

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

'with'=>array(

'comments'=>array(

'scopes'=>'approved'

),

),

),

);

}

}

В версии 1.1.7 появилась возможность передавать параметры именованным группам условий связи. К примеру, если в Post есть именованная группа условий rated, принимающая минимальный рейтинг записи, использовать её в User можно следующим образом:

Примечание: до версии 1.1.7 именованные группы условий, применяемые к реляционным моделям, должны быть описаны в CActiveRecord::scopes. Поэтому они не могут быть параметризованы.

$users=User::model()->findAll(array(

'with'=>array(

'posts'=>array(

'scopes'=>array(

'rated'=>5,

),

),

),

));

 

class Post extends CActiveRecord

{

......

 

public function rated($rating)

{

$this->getDbCriteria()->mergeWith(array(

'condition'=>'rating=:rating',

'params'=>array(':rating'=>$rating),

));

return $this;

}

 

......

}




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

Установка связей между AR-классами | Выполнение реляционного запроса | Параметры реляционного запроса | Adjectives | Volunteer: ??? | Project description |


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