Php Laravel 5.6搜索表格
在我正在开发的一个应用程序中,有两个主要的搜索:站点范围的搜索和快速搜索 快速搜索 快速搜索必须采用角色、用户和部门,并返回符合条件的所有用户。我已经看到了一个潜在的问题,那就是你可以选择一个不属于某个部门的角色。。。但无论如何 这就是我尝试过的Php Laravel 5.6搜索表格,php,forms,laravel,Php,Forms,Laravel,在我正在开发的一个应用程序中,有两个主要的搜索:站点范围的搜索和快速搜索 快速搜索 快速搜索必须采用角色、用户和部门,并返回符合条件的所有用户。我已经看到了一个潜在的问题,那就是你可以选择一个不属于某个部门的角色。。。但无论如何 这就是我尝试过的 public function userSearch(Request $request) { $department = $request->get('department'); $role = $request->get(
public function userSearch(Request $request)
{
$department = $request->get('department');
$role = $request->get('role');
$location = $request->get('location');
$users = User::where('department', $department)
->where('role', $role)
->where('location', $location)
->get();
foreach($users as $user)
{
echo '<br />' . $user->username;
}
}
我在Laravel文档中读到有一个名为Scout的包,但是在给定查询字符串的情况下,有没有更基本的方法从每个模型中获取所有内容
我想归还的物品:
- 使用者
- 团队
- 标题相似的文件
- 新闻文章
users = User::where('name', 'like', '%' . Input::get('name') . '%')
->orWhere('name', 'like', '%' . Input::get('name') . '%')
articles= Article::where('name', 'like', '%' . Input::get('name') . '%')
->orWhere('name', 'like', '%' . Input::get('name') . '%')
等等
然后,在显示结果时,只需执行以下操作:
return('nameofview', compact('users', 'articles')
或者这可能是缓慢而繁琐的
更新
对于站点范围的搜索,目前,我只有:
public function search(Request $request)
{
$search = $request->get('q');
$users = User::where('username', 'like', '%' . $request->get('q') . '%')
->orWhere('displayName', 'like', '%' . $request->get('q') . '%')
->orWhere('email', 'like', '%' . $request->get('q') . '%')
->orWhere('role', 'like', '%' . $request->get('q') . '%')
->orWhere('department', 'like', '%' . $request->get('q') . '%')
->orWhere('location', 'like', '%' . $request->get('q') . '%')
->orWhere('directDialIn', 'like', '%' . $request->get('q') . '%')
->orWhere('mobileNumber', 'like', '%' . $request->get('q') . '%')->get();
return view('pages.search.index', compact('search', 'users'));
}
为了快速搜索,我添加了一些查询范围
/**
* Scope a query by department
*/
public function scopeByDepartment($query, $department)
{
return $query->where('department', $department);
}
/**
* Scope a query by role
*/
public function scopeByRole($query, $role)
{
return $query->where('role', $role);
}
/**
* Scope a query by location
*/
public function scopeByLocation($query, $location)
{
return $query->where('location', $location);
}
使用条件子句和作用域的组合,有一种更好的方法来实现您想要做的事情。例如
User::all()->when(isset($request->department), function ($q) use ($request) {
$q->byDepartment($request->department);
})
->when(isset($request->role), function($q) use ($request) {
$q->byRole($request->role);
});
一旦在模型上设置了作用域,现在就可以有选择地按任意数量的请求变量进行筛选,这样就不必担心它是否未设置。这也使您的代码更加紧凑。因此我基本上可以为每个字段设置一个查询范围?回答第一个问题-是。例如,最好的地方是Laravel文档。从小处做起。创建一个查询范围,用它测试表单并构建它。你很快就能让它工作。谢谢你,我要休息一下,然后我会回来报告。我定义了byDepartment,但当你运行它时,我得到以下结果:Method Illumb\Database\Eloquent\Collection::byDepartment不存在。你必须在作用域前面加上“scope”,所以你的作用域将被称为scopeByDepartment($query,$value)
User::all()->when(isset($request->department), function ($q) use ($request) {
$q->byDepartment($request->department);
})
->when(isset($request->role), function($q) use ($request) {
$q->byRole($request->role);
});