如何在Laravel中使用Eloquent将查询参数连接到范围中的查询



我正试图构建一个复杂的查询,其中有未知数量的postalcode区域发布到我的api中。目前我几乎找到了解决方案,但我无法将whereBetween参数连接到范围中的Query。我得到错误查询不能被强制转换为字符串,这也是有道理的。

传递到作用域的数组具有以下结构:$plz = [[10000, 11000], [34200, 34500]];

这是我在范围内的代码:

public function scopePlz($query, $plz)
{
$queryString = '';
foreach ($plz as $index => $single) {
$queryString .=
$index == 0
? "->whereBetween('postalcode_int', [$single[0], $single[1]])"
: "->orWhereBetween('postalcode_int', [$single[0], $single[1]])";
}
return $query . $queryString;
}

您可以这样解决它:

public function scopePlz($query, $plz)
{
$first = array_shift($plz);
$query->whereBetween('postalcode_int', [$first[0], $first[1]]);
foreach ($plz as $single) {
$query->orWhereBetween('postalcode_int', [$single[0], $single[1]]);
}
return $query;
}

从数组中获取第一个项,像where一样添加它,然后通过foreach运行数组的其余部分。

如果您想为所有这些邮政编码使用一个大的where语句,请将此范围封装在一个单独的where方法中。

最新更新