Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.6搜索表格_Php_Forms_Laravel - Fatal编程技术网

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);
});