当我从视图中调用 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()
我正在重写查找方法并在全局范围内添加 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()