I have a table with the field `activated_at` timestamp NULL DEFAULT NULL , which means that it can contain a timestamp, or it can be null and null by default.
I have another [gii-generated] search model with the following configuration in the search() method:
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', 'first_name', $this->first_name]) ->andFilterWhere(['like', 'last_name', $this->last_name]); if($this->activated || $this->activated === "0") {
Yes, I set the activated property to my class:
public $activated;
And my rules() method looks like this:
public function rules() { return [ [['id', 'status', 'role', 'created_at', 'updated_at', 'completed_files'], 'integer'], ['activated', 'string'], [['username', 'first_name', 'last_name', 'auth_key', 'password_hash', 'password_reset_token', 'email', 'deleted_at', 'completed_files', 'activated_at'], 'safe'], ]; }
What I tried to set in the search() method is a filter in the activated_at field depending on the value of $activated (see code above):
if($this->activated || $this->activated === "0") { #die(var_dump($this->activated)); if($this->activated === '1') {
I use it with a GridView - every other filter works except this one.
What am I doing wrong here?
A and how to correctly execute such requests:
IS NULL something IS NOT NULL something
With Yii 2 ActiveRecord Query Designer?
EDIT: Line: if(!isset($_GET['deleted'])) used for something else, and this works fine.