Кто-нибудь может объяснить, как работает CDbCriteria->scopes?

Я только что проверил справочную страницу CDbCriteria, но информации об этом недостаточно. Это свойство доступно начиная с v1.1.7, и я не смог найти никакой помощи для него. Это для динамического изменения Model->scopes "на лету"?

2 ответа

Решение

Области являются простым способом создания простых фильтров по умолчанию. С помощью области вы можете автоматически сортировать результаты по определенным столбцам, ограничивать результаты, применять условия и т. Д. В ссылках, предоставляемых @ldg, есть большой пример того, насколько они крутые:

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

Кто-то извлекает все недавно опубликованные посты в одну строку. Их легче поддерживать, чем встроенные условия (например, Post::model()->findAll('status=1')) и заключены внутри каждой модели, что означает большую прозрачность и простоту использования.

Кроме того, вы можете создавать свои собственные области, основанные на параметрах, например:

public function last($amount)
{
    $this->getDbCriteria()->mergeWith(array(
        'order' => 't.create_time DESC',
        'limit' => $amount,
    ));
    return $this;
}

Добавление чего-то подобного в модель позволит вам выбрать количество объектов, которые вы хотите извлечь из базы данных (отсортировано по времени создания). Возвращая сам объект, вы разрешаете цепочку методов.

Вот пример:

$last3posts=Post::model()->last(3)->findAll();

Получает последние 3 элемента. Конечно, вы можете расширить пример практически до любого свойства в базе данных. ура

Да, области действия могут использоваться для изменения атрибутов CDbCriteria с предварительно созданными условиями, а также могут передаваться параметры. До версии 1.1.7 вы могли использовать их в запросе model(), и их можно объединять в цепочки. См.: http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes

Начиная с версии 1.1.7 вы также можете использовать области как свойство CDbCriteria. См.: http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-named-scopes

Другие вопросы по тегам