从视图调用find()方法时,自定义ActiveRecord类无法正常工作?

时间:2018-03-20 06:32:18

标签: yii2 yii2-advanced-app yii-components

我重写了find方法并在全局范围内添加了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();

3 个答案:

答案 0 :(得分:2)

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

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

第二个结束覆盖第一个

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

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

这应该有效。

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

答案 1 :(得分:1)

使用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]);
    }
}

答案 2 :(得分:1)

尝试使用onCondition()

进行更改
{{1}}