使用CDbCriteria和CactiveDapProvider的Yii和join以及自定义搜索

使用CDbCriteria和CactiveDapProvider的Yii和join以及自定义搜索,yii,relational-database,cgridview,cactivedataprovider,Yii,Relational Database,Cgridview,Cactivedataprovider,您好,我正在使用Yii创建应用程序 我已经修改了模型中的search(),并提出了一个问题 用户可以作为管理员、经理、客户机登录 当用户以管理员身份登录时,他只能从他们都属于的商店查看客户端。到目前为止,很好,我已经成功地做到了 现在的问题是,当我试图阻止经理在CGridView中查看来自同一商店的其他经理(从而编辑彼此的帐户)时 关系 /** * @return array relational rules. */ public function relations() { //

您好,我正在使用Yii创建应用程序

我已经修改了模型中的search(),并提出了一个问题

用户可以作为管理员、经理、客户机登录

当用户以管理员身份登录时,他只能从他们都属于的商店查看客户端。到目前为止,很好,我已经成功地做到了

现在的问题是,当我试图阻止经理在CGridView中查看来自同一商店的其他经理(从而编辑彼此的帐户)时

关系

/**
 * @return array relational rules.
 */
public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'authitems' => array(self::MANY_MANY, 'Authassignment', 'authassignment(userid, itemname)'),
        'additionalContacts' => array(self::HAS_MANY, 'AdditionalContact', 'Client_Id'),
        'store' => array(self::BELONGS_TO, 'Store', 'Store_Id'),
        'user' => array(self::BELONGS_TO, 'User', 'User_Id'),
        'genericPoints' => array(self::HAS_MANY, 'GenericPoint', 'Client_Id'),
    );
}
自定义模型搜索

public function searchCustom()
{
    // Warning: Please modify the following code to remove attributes that
    // should not be searched.

    $criteria=new CDbCriteria;
    $criteria->addCondition('t.id !='.$this->id);
    $criteria->compare('t.Created',$this->Created,true);
    $criteria->compare('t.Updated',$this->Updated,true);
    $criteria->compare('t.Discount',$this->Discount,true);
    $criteria->compare('t.Discount_Type',$this->Discount_Type,true);
    $criteria->addCondition('t.Store_Id ='.$this->Store_Id);

    //$criteria->addCondition('t.id !='.$this->id);

    //GET FIELDS FROM USER IN SEARCH

    $criteria->with=array('user');
    $criteria->compare('user.id',$this->User_Id,true);
    $criteria->compare('user.First_Name',$this->First_Name,true);
    $criteria->compare('user.Last_Name',$this->Last_Name,true);
    $criteria->compare('user.Username',$this->Username,true);
    $criteria->compare('user.Email',$this->Email,true);
    $criteria->addCondition('user.Status = 1');

    $criteria->with=array('authitems');
    $criteria->compare('authitems.userid',$this->id,false);
    $criteria->compare('authitems.itemname','client',false);

    $criteria->together = true;

    $criteria->order = 't.Created DESC';
    return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
    ));
}
这就是我得到的错误

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user.Status' in 'where clause'. The SQL statement executed was: SELECT COUNT(DISTINCT `t`.`id`) FROM `client` `t` LEFT OUTER JOIN `authassignment` `authitems_authitems` ON (`t`.`id`=`authitems_authitems`.`userid`) LEFT OUTER JOIN `authassignment` `authitems` ON (`authitems`.`itemname`=`authitems_authitems`.`itemname`) WHERE (((((t.id !=2) AND (t.Store_Id =1)) AND (user.Status = 1)) AND (authitems.userid=:ycp0)) AND (authitems.itemname=:ycp1))
我知道这与gii为我建立的关系有关,但我无法准确指出


也许authitems的多个关系会阻止用户关系加载?

与其使用为
$criteria->进行另一次分配(这将覆盖上一次),您只需尝试:

$criteria->with=array('user', 'authitems');