我重写了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();
答案 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}}