【问题标题】:Selecting to multiple tables in Laravel在 Laravel 中选择多个表
【发布时间】:2019-01-21 07:11:31
【问题描述】:

尝试从用户输入 $query 中选择条目。我想搜索first_namelast_nameaddress(等)在deleted_at 上具有NULL 的列。到目前为止我所做的是:

$data = DB::table('users')
      ->where('first_name', 'LIKE', '%' . $query . '%')
      ->orWhere('last_name', 'LIKE', '%' . $query . '%')
      ->orWhere('address', 'LIKE', '%' . $query. '%')
          ->whereNull('deleted_at')
          ->get();

我的目标是通过用户的查询搜索上述列并显示它找到的任何匹配项。问题是,它还在deleted_at 列中显示了非空条目。我只希望在deleted_at. 看到为 NULL 的结果我可能做错了什么?

【问题讨论】:

    标签: mysql laravel-5 eloquent


    【解决方案1】:

    利用parameter grouping

    $data = DB::table('users')
      ->whereNull('deleted_at')
      ->where(function ($query) {
           $query->where('first_name', 'LIKE', '%' . $query . '%')
           ->orWhere('last_name', 'LIKE', '%' . $query . '%')
           ->orWhere('address', 'LIKE', '%' . $query. '%');
       })
      ->get();
    

    【讨论】:

    • 我明白了,这解决了我的问题。顺便说一句,如果我想添加另一个 where AND 子句,我只需要添加 ->where('another_column', 'LIKE', '%' . $query . '%') 对吗?
    • 如果我没记错的话请纠正我,您是否喜欢添加“;”在最后一个 ->orWhere 子句的末尾?
    • 这取决于您的用例。您可以通过反复试验来测试行为(了解其工作原理的最佳方式):)
    • 只是提供一些信息。当我这样做时它起作用了:->where(function($string) use ($query) { $string->where('first_name', 'LIKE', '%' . $query . '%') ->orWhere('last_name', 'LIKE', '%' . $query . '%');})
    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2017-08-22
    • 2021-07-25
    相关资源
    最近更新 更多