php – 如何使用Yii 2 ActiveRecord进行IS NULL和IS NOT NULL?
发布时间:2020-12-13 18:17:16 所属栏目:PHP教程 来源:网络整理
导读:我有一个表有一个字段`activated_at`时间戳NULL DEFAULT NULL,这意味着它可以包含一个时间戳,或者它可以为null,默认情况下它为null. 我在search()方法中有另一个[gii-generated]搜索模型,其配置如下: public function search($params){ $query = User::find
我有一个表有一个字段`activated_at`时间戳NULL DEFAULT NULL,这意味着它可以包含一个时间戳,或者它可以为null,默认情况下它为null.
我在search()方法中有另一个[gii-generated]搜索模型,其配置如下: public function search($params) { $query = User::find(); // add conditions that should always apply here $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } $andFilterWhere = [ 'id' => $this->id,'status' => $this->status,'role' => $this->role,'created_at' => $this->created_at,'updated_at' => $this->updated_at,'completed_files' => $this->completed_files,// 'activated_at' => null,]; if(!isset($_GET['deleted'])) { $query->where(['deleted_at' => null]); $andFilterWhere['deleted_at'] = null; } else if($_GET['deleted'] === 'true') { $query->where(['not',['deleted_at' => null]]); } // grid filtering conditions $query->andFilterWhere( $andFilterWhere ); $query->andFilterWhere(['like','first_name',$this->username]) ->andFilterWhere(['like','auth_key',$this->auth_key]) ->andFilterWhere(['like','password_hash',$this->password_hash]) ->andFilterWhere(['like','password_reset_token',$this->password_reset_token]) ->andFilterWhere(['like','email',$this->email]) ->andFilterWhere(['like',$this->first_name]) ->andFilterWhere(['like','last_name',$this->last_name]); if($this->activated || $this->activated === "0") { #die(var_dump($this->activated)); if($this->activated === '1') { // this doesn't filter $query->andFilterWhere(['not',['activated_at' => null]]); } else if($this->activated === '0') { // this doesn't either $query->andFilterWhere(['activated_at',null]); } } $dataProvider = new ActiveDataProvider([ 'query' => $query,]); return $dataProvider; } 是的,我在我的班级中设置了激活的属性: public $activated; 我的rules()方法如下: public function rules() { return [ [['id','status','role','created_at','updated_at','completed_files'],'integer'],['activated','string'],[['username','deleted_at','completed_files','activated_at'],'safe'],]; } 我试图在search()方法中设置的是根据$activated值过滤字段activated_at(参见上面的代码): if($this->activated || $this->activated === "0") { #die(var_dump($this->activated)); if($this->activated === '1') { // this doesn't filter $query->andFilterWhere(['not',['activated_at' => null]]); } else if($this->activated === '0') { // this doesn't either $query->andFilterWhere(['activated_at',null]); $andFilterWhere['activated_at'] = null; } } 我将它与GridView一起使用 – 除了这个之外,其他每个过滤器都有效. 我在这做错了什么? Aand如何正确地执行此类查询: IS NULL something IS NOT NULL something 使用Yii 2的ActiveRecord查询构建器? 编辑:行:if(!isset($_ GET [‘deleted’]))用于其他东西,这是正常的.
如果我理解正确,你可以使用和在哪里
->andWhere(['not',['activated_at' => null]]) 但是,在执行相关值不为空的情况下执行 来自doc http://www.yiiframework.com/doc-2.0/yii-db-query.html
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |