过滤PHP中的Laravel OR运算符

时间:2017-09-24 14:09:30

标签: php laravel laravel-5

我正在关注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);

知道这可能是什么方法吗?

谢谢!

1 个答案:

答案 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