Это должно работать, добавьте его в критерии поиска в методе search ():
$criteria->with[]='user';
$criteria->addSearchCondition("user.secondname",$this->user_id);
Это то, что я делаю, хотя:
if(!intval($this->user_id) && is_string($this->user_id) && strlen($this->user_id) > 0) {
$criteria->with[]='user';
$criteria->addSearchCondition("user.secondname",$this->user_id);
} else
$criteria->compare('t.user_id',$this->user_id);
А вот и CGridViewопределение:
'columns'=>array(
...
array(
'name' => 'user_id',
'header'=>'User',
'sortable'=>false, // since it would still be sorting based on ID
// 'value' => '$data->user->lastname', // basic version
'value'=>'CHtml::link((isset($data->user))?$data->user->username:$data->user_id,array("user/view","id"=>$data->user_id))', // link version
),
Это забавная маленькая хитрость: если поисковый термин является строкой, а НЕ intval (), он ищет пользователя по его второму имени через отношение «пользователь».Но если вы введете user_id, он найдет пользователя по его user_id - функции поиска по умолчанию ().
ПРИМЕЧАНИЕ. Это включит фильтрацию, но все равно будет сортировать по идентификатору.Вам нужно будет реализовать что-то дополнительное, чтобы заставить сортировку работать.
Конечно, есть и другие способы сделать это, но я так и делаю.Я подозреваю, что есть «право» сделать это, используя отношение, но моя техника работает безупречно.