当我从视图中调用 find() 方法时,自定义 ActiveRecord class 不工作?

The custom ActiveRecord class not working when i call the find() method from view?

我正在重写查找方法并在全局范围内添加 where 条件,这是我的代码

class Order extends \common\components\ActiveRecord    

\common\components\ActiveRecord

namespace common\components;
use Yii;

use yii\db\ActiveRecord as BaseActiveRecord;

class ActiveRecord extends BaseActiveRecord{
    public static function find() {
        return parent::find()
           ->where(['=',static::tableName().'.company_id',Yii::$app->user->identity->company_id])
           ->andWhere(['=',static::tableName().'.branch_id',Yii::$app->user->identity->branch_id]);
    }
}

当我像这样从视图中调用模型时,查找不起作用

 echo  \common\models\Order::find()->where(['status'=>'0'])->count();

使用 andWhere() 这样您的默认条件就不会被覆盖:

class ActiveRecord extends BaseActiveRecord {
    public static function find() {
        return parent::find()
            ->andWhere(['=',static::tableName().'.company_id',Yii::$app->user->identity->company_id])
            ->andWhere(['=',static::tableName().'.branch_id',Yii::$app->user->identity->branch_id]);
    }
}

尝试用onCondition()改变

class ActiveRecord extends BaseActiveRecord {
   public static function find() {
     return parent::find()
        ->onCondition([
        ['=',static::tableName().'.company_id',Yii::$app->user->identity->company_id],
        ['=',static::tableName().'.branch_id',Yii::$app->user->identity->branch_id]
     ]);
   }
}

由于您在 ActiveRecord 中使用的 find 函数中使用 where(),然后在此语句中使用 where()

echo  \common\models\Order::find()->where(['status'=>'0'])->count();

第二个最终覆盖第一个

您需要做的是在所有需要放入 ActiveRecord 的原始条件起作用的情况下使用 andWhere()。试试看:

echo  \common\models\Order::find()->andWhere(['status'=>'0'])->count();

这应该有效。

再次记住,在所有需要应用原始条件的地方使用 andWhere()