Laravel 5.8:Where anulls和Where has effect

Laravel 5.8:Where anulls和Where has effect,laravel,eloquent,Laravel,Eloquent,我正在尝试做一个简单的搜索功能。为此,我实现了以下查询: Profile::whereHas('accounts', function ($query) use ($id) { $query->where('user_id', $id); }) ->where('username', 'LIKE', "%{$search}%") ->paginate(20); whereHas选择具有$id的用户拥有的配置文件 然后,使用wher

我正在尝试做一个简单的搜索功能。为此,我实现了以下查询:

Profile::whereHas('accounts', function ($query) use ($id) { 
        $query->where('user_id', $id); 
    })
    ->where('username', 'LIKE', "%{$search}%")
    ->paginate(20);
  • whereHas
    选择具有
    $id
    的用户拥有的配置文件
  • 然后,使用
    where
    来确定搜索是否与数据库中的某个用户名匹配
  • 最后,我们对结果进行分页
到目前为止还不错

当我添加这样的
或where
时,问题就出现了:

Profile::whereHas('accounts', function ($query) use ($id) { 
        $query->where('user_id', $id); 
    })
    ->where('username', 'LIKE', "%{$search}%")
    ->orWhere('fullname', 'LIKE', "%{$search}%")
    ->paginate(20);

我希望查询分析搜索是否与用户名和/或全名匹配。当我添加
或where
时,但是
whereHas
不起作用,结果来自所有用户。

您需要这样做:

Profile::whereHas('accounts', function ($query) use ($id) { 
    $query->where('user_id', $id); 
})
->where(function($query) use ($search) {
    $query->where('username', 'LIKE', "%{$search}%")
          ->orWhere('fullname', 'LIKE', "%{$search}%");
})
->paginate(20);