在 where 条件之前 Where 不工作?
And Where is not working before where condition?
这里我重写了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 模型中重写
活动记录全局条件。
如果我像这样使用 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]);
}
}
在我的本地模型中有一些覆盖了全局条件。困难
我用和在哪里覆盖每个地方。
这就是 Yii2 ActiveRecord
的工作方式。当您调用方法 where()
时,它会重置条件,即使它不为空,当您调用 andWhere()
时,它会为现有条件添加新条件。
您应该将 BaseActiveRecord
中的 where
和 andWhere
更改为 onCondition
,我想这是 \yii\db\ActiveRecord
的别名 作为 ActiveQuery
的 parent::find()
return 对象,如果您查看 find()
方法,它 return 位于行
下方
\yii\db\ActiveRecord
return Yii::createObject(ActiveQuery::className(), [get_called_class()]);
你可以在这里看到customizing-query-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;
它将生成以下查询
SELECT * FROM `order`
WHERE (`status` = 3)
AND
((`order`.`application_id` = 1) AND (`order`.`branch_id` = 2))
这里我重写了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 模型中重写 活动记录全局条件。
如果我像这样使用 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]);
}
}
在我的本地模型中有一些覆盖了全局条件。困难 我用和在哪里覆盖每个地方。
这就是 Yii2 ActiveRecord
的工作方式。当您调用方法 where()
时,它会重置条件,即使它不为空,当您调用 andWhere()
时,它会为现有条件添加新条件。
您应该将 BaseActiveRecord
中的 where
和 andWhere
更改为 onCondition
,我想这是 \yii\db\ActiveRecord
的别名 作为 ActiveQuery
的 parent::find()
return 对象,如果您查看 find()
方法,它 return 位于行
\yii\db\ActiveRecord
return Yii::createObject(ActiveQuery::className(), [get_called_class()]);
你可以在这里看到customizing-query-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;
它将生成以下查询
SELECT * FROM `order`
WHERE (`status` = 3)
AND
((`order`.`application_id` = 1) AND (`order`.`branch_id` = 2))