我正在关注this教程,以便在我的网站上制作过滤器。
我试图在HTML中的过滤器中添加OR语句。
例如,
<a href="{{ route('rooms.index',
['type' => request('type'),
'sort' => request('sort'),
'region' => 'Lisbon'|'Lisboa',
]) }}">Lisbon</a>
然而,如果我这样做,只有&#34;里斯本&#34;出现了,但那些为#Lis; Lisboa&#34;不要。
我也试过
'region' => ('Lisbon|Lisboa'),
'region' => ('Lisbon||Lisboa'),
'region' => array('Lisbon','Lisboa'),
['region' => 'Lisbon', 'region' => 'Lisboa',],
一切都没有运气。
似乎里斯本和#34;之间有一个逗号。和#34; Lisboa&#34;操作员只看第一个选项,&#34;里斯本&#34;在这种情况下。
(如果您想知道,Google Maps API会为管理区提供里斯本或Lisboa,即使我将其限制为英语。)
然后,对于我的控制器,以下是我如何进行过滤器:
public function index()
{
$rooms = new Room;
if (request()->has('type')) {
$rooms = $rooms->where('type', request('type'));
}
if (request()->has('region')) {
$rooms = $rooms->where('region', request('region'));
}
if (request()->has('sort')) {
$rooms = $rooms->orderBy('created_at', request('sort'));
}
$rooms = $rooms->paginate(20)->appends([
'type' => request('type'),
'region' => request('region'),
'sort' => request('sort'),
]);
return view('rooms.index')->with('rooms', $rooms);
知道这可能是什么方法吗?
谢谢!
答案 0 :(得分:1)
Laravel集合包含一个whereIn()
方法来过滤数组。 where()
只接受一个值。
https://laravel.com/docs/5.5/collections#method-wherein
因此,如果您将数据数组作为区域传递,则可以执行以下操作:
$rooms = $rooms->whereIn('region', request('region'));
<强>此外强>
字符串'Lisbon|Lisboa'
是字符串,而不是表达式。您不应期望任何代码将其理解为两个单独的值。将它括在括号中并不会改变任何内容,括号用于为操作提供顺序,如数学。
'Lisbon'|'Lisboa'
是按位操作,因为|
是一个按位运算符,而不是您要查找的内容。 ||
是一个OR运算符,但是你不能只将一个表达式作为参数传递,如果你使用{{1,那么你只需要将表达式求值的值传递给true或false。 }}
在处理值列表时,您几乎总是希望使用PHP数组和数组函数。 in_array是潜在的功能 为此过滤器供电。请务必了解数组并查看可用的函数here。