Laravel 如果请求不为空添加 orWhere

Posted

技术标签:

【中文标题】Laravel 如果请求不为空添加 orWhere【英文标题】:Laravel if request not empty add orWhere 【发布时间】:2018-12-02 04:21:00 【问题描述】:
public function index(Request $request) 
    if ($request->has('deleted')) 
        $assistants = Assistant::onlyTrashed()->where(1);
        if ($request->has('firstName'))
            $assistants = $assistants->orWhere('firstname', 'LIKE', $request->firstName.'%');
        if ($request->has('lastName'))
            $assistants = $assistants->orWhere('lastname', 'LIKE', $request->lastName.'%');
        if ($request->has('email'))
            $assistants = $assistants->orWhere('email', 'LIKE', $request->email.'%');
     else 
        $assistants = Assistant::all()->where(1);
        if ($request->has('firstName'))
            $assistants = $assistants->orWhere('firstname', 'LIKE', $request->firstName.'%');
        if ($request->has('lastName'))
            $assistants = $assistants->orWhere('lastname', 'LIKE', $request->lastName.'%');
        if ($request->has('email'))
            $assistants = $assistants->orWhere('email', 'LIKE', $request->email.'%');
    

    return $this->showAll($assistants);

我正在尝试检查 firstName、lastName 或 email 是否不为空,请使用 LIKE 命令添加到查询。

但它返回一个错误:

类型错误:函数的参数太少 Illuminate\Support\Collection::where(), 1 次通过

在 Laravel 5.6 中。

【问题讨论】:

【参考方案1】:

你有多个问题。

    where(1) 不是有效的查询生成器调用。你似乎也不需要这个。

    您不需要重复所有这些request->has() 调用,将它们放在 if ... else ... 下方。

    Assistants::all() 将实际运行查询并返回集合中的所有行。使用Assistants::query() 返回一个查询生成器实例。

【讨论】:

我应该写原始查询吗?我找不到 ::query()

以上是关于Laravel 如果请求不为空添加 orWhere的主要内容,如果未能解决你的问题,请参考以下文章

如果 Laravel 中的值不为空,如何验证输入字段

仅当值不为空时,Laravel 才请求验证规则?

如何在 laravel 中使用 orWhere() 和 where

Laravel 验证仅在字段不为空时验证正则表达式

选择所有 3 列同时不为空的位置(Laravel 查询生成器)

Laravel/Eloquent/DB 查询 - 当为空且不为空时加入