Laravel搜索多个`where`s

时间:2018-08-10 08:17:38

标签: php mysql laravel

我正尝试在po网站中使用where进行搜索。

我的代码:

public function globalSearch($subject) {
    $users = User::where('username', 'LIKE', '%'.$subject.'%')->get();
    $users = User::where('steam_id', 'LIKE', '%'.$subject.'%')->get();

    $results = array();
    foreach ($users as $user) {
        $results[$user->username] = url('player/'.$user->slug);
    }

    return $results;
}

但是它只是在搜索steam_id,如果我输入用户名,它什么也找不到。我认为问题是,我需要在一行中使用多个where。抱歉,如果您不明白我的意思,但是我该如何在多个字段中使用1 where

4 个答案:

答案 0 :(得分:1)

下面两行覆盖了您的搜索。因此,请删除这两行并按如下所示编写。

 $users = User::where('username', 'LIKE', '%'.$subject.'%')->get();
 $users = User::where('steam_id', 'LIKE', '%'.$subject.'%')->get();

用户使用以下代码。

 $users = User::where('username', 'LIKE', '%'.$subject.'%')->orwhere('steam_id', 'LIKE', '%'.$subject.'%')->get();

答案 1 :(得分:1)

您正在用第二条语句覆盖$users。如果您希望同时使用两个where子句,则可以将数组用作选项:

$users = User::where([
    ['username', 'LIKE', '%'.$subject.'%'],
    ['steam_id', 'LIKE', '%'.$subject.'%']
])->get();

有关Laravel where clauses的更多信息。

答案 2 :(得分:0)

这会做这项工作吗?

public function globalSearch($subject)
{
  return User::where('username', 'LIKE', '%'.$subject.'%')->orWhere('steam_id', 'LIKE', '%'.$subject.'%')->get();
}

理想情况下,按表索引分组不会得到意外结果。

答案 3 :(得分:0)

您可以使用User::where()内部的数组,就像@kerbholz正确回答状态一样。或者,您可以像这样进行链接:

User::where('foo', 1)->where('bar', false)->get();

与上面的答案得出的结果相同,但在我看来通常更易读。