当数据为空时如何过滤?

时间:2017-02-20 20:07:48

标签: php yii2

我尝试在 PlanificacionSearch 中进行新的查询搜索,但我不知道如何过滤值' asistencia' 的结果仅为空。在下面的代码中,在这个条件下,它返回所有元素,忽略该值的空条件。

在SQL中,这是所需的查询:

SELECT asistencia FROM gestion_talleres.planificacion
WHERE rutProfesor = <session_id> AND asistencia IS NULL

这是我在Yii 2中写的查询:

$query
            ->andFilterWhere(['asistencia' => null])
            ->andFilterWhere(['like', 'rutProfesor', Yii::$app->user->identity->rutProfesor]);

&#39; rutProfesor&#39; 的条件已经有效,但不是&#39; asistencia&#39; 。我需要帮助。

2 个答案:

答案 0 :(得分:4)

  

根据最终用户的输入构建WHERE条件时,通常要忽略那些空的输入值。例如,在允许您通过用户名和电子邮件进行搜索的搜索表单中,如果用户未在用户名/电子邮件输入字段中输入任何内容,则您希望忽略用户名/电子邮件条件。您可以使用filterWhere()方法实现此目标:

http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html#filter-conditions

andFilterWhere(['asistencia' => null])仅在值不为空时才起作用

如果你需要检查空状态,你应该使用andWhere

andWhere(['asistencia' => null]) 

总是执行或具有多个值的地方,例如:

 // ...WHERE (`status` = 10) AND (`type` IS NULL) AND (`id` IN (4, 8, 15))
 $query->where([
   'status' => 10,
   'type' => null,
   'id' => [4, 8, 15],
]);

http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html

答案 1 :(得分:0)

尝试这种方式:

$query
    ->andFilterWhere(['=', 'asistencia', null])
    ->andFilterWhere(['like', 'rutProfesor', Yii::$app->user->identity->rutProfesor]);