我是Laravell和sql的新手,我将有两个场景,这两个场景都取决于用户输入并且该列可能具有空值,所以最终数组看起来像
数据库数据
col1 col2
abc xyz
abc2 xyz2
null null
abc3 xyz3
场景1:
col1 = ["abc","abc2","abc3"];
col2 = ["xyz","xyz2","xyz3"];
场景1:
col1 = ["abc","abc2","abc"];
col2 = ["xyz","xyz2",null];
MY查询基于用户输入,例如col1可以为空,即null,col2可以为null
我正在使用这个查询:
$query->whereIn( $field, $col1);
$query->whereIn( $field2, $col2);
对于场景1:每件事都很好
col1 col2
abc xyz
abc2 xyz2
abc3 xyz3
对于场景1:不使用空
col1 col2
空
通过这个查询
$query->whereIn( $field, $col1);
$query->orWhereNull($field)
$query->whereIn( $field2, $col2);
$query->orWhereNull($field2)
无结果
有人能引导我朝着正确的方向前进吗?我怎么能得到空的结果呢并且仅供参考其and查询,即过滤器col1&;col2
我现在可以测试它,但您需要分离您的语句
类似于:
$query->whereHas($field, function ($query) use ($field, $col1) {
if (in_array(null, $col1)) {
$query->whereNull($field)->orWhereIn($field, $col1);
} else {
$query->whereIn($field, $col1);
}
});
$query->whereHas($field2, function ($query) use ($field2, $col2) {
if (in_array(null, $col2)) {
$query->whereNull($field2)->orWhereIn($field2, $col2);
} else {
$query->whereIn($field2, $col2);
}
});