哪个条件不合适?

时间:2018-03-22 06:27:15

标签: yii2 yii2-advanced-app

我在这里覆盖了find()方法

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

现在如果我使用这样的条件

\common\models\Order::find()->where(['stastus'=>'3'])->count(); 

Active Record全局条件在我之前执行 在Order模型中使用,之后使用Order Model来覆盖 积极记录全球状况。

如果我使用像这样的Active Record条件

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 个答案:

答案 0 :(得分:1)

您应该将where中的andWhereonCondition更改为BaseActiveRecord,我认为这是 \yii\db\ActiveRecord 的别名作为parent::find()的{​​{1}}返回对象,如果您查看ActiveQuery方法,则返回到行

<强> find()

\yii\db\ActiveRecord

您可以在此处customizing-query-class看到添加额外条件

 return Yii::createObject(ActiveQuery::className(), [get_called_class()]);

现在,如果你打电话

class ActiveRecord extends BaseActiveRecord{
    return parent::find ()
            ->onCondition ( [ 'and' ,
                [ '=' , static::tableName () . '.application_id' , 1 ] ,
                [ '=' , static::tableName () . '.branch_id' , 2 ]
    ] );
}

它将生成以下查询

\common\models\Order::find()->where(['status'=>'3'])->createCommand()->rawSql; 

答案 1 :(得分:0)

这就是Yii2 ActiveRecord的工作方式。当您调用方法where()时,它会重置条件,即使它不是空的,当您调用andWhere()时,它会为现有条件添加新条件。