如何使用数组为null的where In(有条件)



我是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);
}
});

最新更新