您可以在模型搜索方法中加入如下两个表格。使用:$criteria->join
$criteria = new CDbCriteria;
$criteria->distinct = true;
$criteria->select = 't.*, authItem.displayName as role, p.type as parentTypes';
$criteria->join = 'LEFT JOIN AuthAssignment authAssignment ON authAssignment.userId = t.id
LEFT JOIN AuthItem authItem ON authItem.name = authAssignment.itemName
LEFT JOIN Parent p ON p.userId = t.id
LEFT JOIN Device d ON d.parentId = p.id';
$criteria->compare('t.id', $this->id);
$criteria->compare('t.username', $this->username, true);
$criteria->compare('t.password', $this->password, true);
$criteria->compare('t.tempPass', $this->tempPass, true);
$criteria->compare('t.pin', $this->pin, true);
//$criteria->compare('t.type', $this->parentTypes, true);
$criteria->compare('p.type', $this->parentTypes, true);
$criteria->compare('t.firstName', $this->firstName, true);
$criteria->compare('t.lastName', $this->lastName, true);
$criteria->compare('t.dob', $this->dob, true);
$criteria->compare('t.gender', $this->gender, true);
$criteria->compare('t.email', $this->email, true);
$criteria->compare('t.alternateEmail', $this->alternateEmail, true);
$criteria->compare('t.mobileNo', $this->mobileNo, true);
$criteria->compare('t.phoneNo', $this->phoneNo, true);
$criteria->compare('faxNo', $this->faxNo, true);
$criteria->compare('address', $this->address, true);
$criteria->compare('alternateAddress', $this->alternateAddress, true);
$criteria->compare('startDate', $this->startDate, true);
$criteria->compare('lastLoginAt', $this->lastLoginAt, true);
$criteria->compare('countryId', $this->countryId);
if (Yii::app()->user->checkAccess('oDeviceDeviceManageByOrganization')) { //only for a ogranization user
// if (Yii::app()->user->organization) // to avoid wrong permission assignment causing issues
$criteria->addCondition('d.organizationId IN (' . Yii::app()->user->organization->organizationId . ')');
}
if (Yii::app()->user->checkAccess('oDeviceDeviceManageByInstitute')) { //only for a institute user
// if (Yii::app()->user->institute) // to avoid wrong permission assignment causing issues
$criteria->addCondition('d.instituteId IN (' . Yii::app()->user->institute->instituteId . ')');
}
if (TK::isEmpty($this->status))
$criteria->addCondition('t.status NOT IN (' . AppModel::STATUS_DELETE . ')');
else
$criteria->compare('t.status', $this->status, true);
$criteria->addCondition('t.type NOT IN (' . User::TYPE_SYSTEM . ', ' . User::TYPE_STUDENT . ', ' . User::TYPE_ORGANIZATION . ', ' . User::TYPE_TEACHER . ', ' . User::TYPE_INSTITUTE . ')');
$criteria->compare('t.createdById', $this->createdById);
$criteria->compare('t.createdAt', $this->createdAt, true);
$criteria->compare('t.updatedById', $this->updatedById);
$criteria->compare('t.updatedAt', $this->updatedAt, true);
//print_r($criteria);
$sort = new CSort();
$sort->defaultOrder = 't.id ASC';
$sort->attributes = array(
'id' => array('asc' => 't.id', 'desc' => 't.id DESC'),
'lastName' => array('asc' => 't.lastName', 'desc' => 't.lastName DESC'),
'firstName' => array('asc' => 't.firstName', 'desc' => 't.firstName DESC'),
'username' => array('asc' => 't.username', 'desc' => 't.username DESC'),
'email' => array('asc' => 't.email', 'desc' => 't.email DESC'),
'parentTypes' => array('asc' => 'parentTypes', 'desc' => 'parentTypes DESC'),
'createdAt' => array('asc' => 't.createdAt', 'desc' => 't.createdAt DESC'),
);
return new CActiveDataProvider($this, array(
'sort' => $sort,
'criteria' => $criteria,
'pagination' => array('pageSize' => Yii::app()->params['defaultPageSize']),
));