Yii выборка записей по типу - PullRequest
0 голосов
/ 10 ноября 2011

Мне интересно, есть ли в Yii эффективный метод группировки элементов по типу.

Допустим, у меня есть следующая модель:

Tag
------
id
name    
type_id

И скажем, есть 5 различных типов Tag с. Я хочу иметь возможность отображать в своем индексе все теги в разделах по type_id. Есть ли Yii-способ сделать это?

За рамками я написал бы такую ​​функцию, чтобы результаты, извлеченные из БД, хранились следующим образом:

$tags[$typeID][] = $tag;

Тогда в каждом разделе я мог сделать что-то вроде:

foreach( $tags[$typeID] as $tag )
{
    // Here are all tags for one $typeID
}

Но мне трудно понять, как это сделать в Yii без:

A) сначала просматривая весь набор результатов и переписывая его или,

B) выполнение 5 разных запросов.

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

При использовании ActiveRecord просто укажите «индекс» в DBCriteria. Итак, в запросе выполните:

ActiveRecordClass::model()->findAll(array('index'=>'type_id'));

Это вернет ассоциированный массив, который вы после. TBF, вероятно, выполняет точно такой же код, но его проще использовать, чем везде.

0 голосов
/ 10 ноября 2011

Предполагая, что ваш активный класс записей называется MyActiveRecordClass, простейшего подхода должно быть достаточно:

$models = MyActiveRecordClass::model()->findAll();
$groupedModels = array();

foreach ($models as $model) {
    $groupedModels[$model->typeID][] = $model;
}

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

...