Есть Yii1. В ней 2 модели Users(id,name,surename) и Contacts(id,phone,email). Связь между моделями 1 к 1.
Есть страница с CGridView куда выводятся данные: Users.id, Users.name, Users.surename, Contacnts.phone, Contacts.email.
По полям телефона и имейла необходимо сделать фильтрацию и сортировку как у других полей. Фильтрацию я сделал, а с сортировкой беда.
Вот контроллер:
public function actionAdmin()
{
$model=new Users('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['Users']))
$model->attributes=$_GET['Users'];
$this->render('admin',array(
'model'=>$model,
));
}
Вот модель:
*/
public function search()
{
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('name',$this->name,true);
$criteria->compare('surename',$this->surename,true);
if ($this->phone){
$criteria->with[] = 'contacts';
$criteria->compare('contacts.phone', $this->phone,true);
}
if ($this->email){
$criteria->with[] = 'contacts';
$criteria->compare('contacts.email', $this->email,true);
}
$sort = new CSort;
$sort->attributes= array(
'contacts.email'=>array(
'defaultOrder'=>'contacts.email asc',
'desc'=>'contacts.email DESC'),
'contacts.phone',
'*',
);
return new CActiveDataProvider(get_class($this), array(
'criteria'=>$criteria,
'sort'=>$sort,
));
}
Вот вьюшка:
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'users-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'name',
'surename',
'email'=>array(
'header'=>'Email',
'value'=>'$data->contacts->email',
'filter'=>CHtml::activeTextField($model,'email')
),
'contacts.phone'=>array(
'header'=>'Phone',
'value'=>'$data->contacts->phone',
'filter'=>CHtml::activeTextField($model,'phone')
),
array(
'class'=>'CButtonColumn',
),
),
)); ?>
Перерыл все форумы, не могу сделать сортировку по имейлу и телефону. Спасибо.