Сортировка по полю из связной таблицы в Yii


Представим, что нужно отсортировать полученные записи из одной таблицы, по полю из другой.
Создадим абстрактную задачу.
У нас есть две таблицы `tbl_url` и `tbl_project`
tbl_url{
id,
www
}

tbl_project{
id,
url_id
}
Каждому проекту (из `tbl_project`) соответствует одно доменное имя (из `tbl_url`). Нужно получить проекты с сортировкой по полю `www` (доменное имя)

В модели Project пропишем следующую связь

public function relations()
{		
	return array(
		'url'=>array(self::BELONGS_TO, 'Url', 'url_id'),
	);
}

Получить проекты с сортировкой по доменному имени можно так:

$criteria = new CDbCriteria;
$criteria->with = array( 'url' );
$dp = new CActiveDataProvider( 'Project', array(
	'criteria'=>$criteria,
	'sort'=>array(
		'defaultOrder'=>'url.www ASC',
	)
)
);
$projects = $dp->getData();
foreach($projects as $project){
	//...
}

Вот такой нехитрый способ.

Запись опубликована автором в рубрике Yii.

Добавить комментарий