【问题标题】:Laravel filter a value in all columnsLaravel 过滤所有列中的值
【发布时间】:2015-04-17 01:35:54
【问题描述】:
public function getBooks($input)
{
    $books= Book::where('book_name', 'LIKE', '%' . $input . '%')->get();
    return Response::json($books);
}

我知道如何按给定值过滤列。但是如何按给定值过滤所有列。例如,我有一个名为“类别”的列,用户应该能够使用相同的搜索栏来过滤类别。

类似:

$books = Book::where('all_columns', 'LIKE', '%' . $input . '%')->get();

谢谢!

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    大多数数据库不支持同时搜索所有列。恐怕您可能不得不将所有列链接在一​​起:

    $books = Book::where('book_name', 'LIKE', '%' . $input . '%')
        ->orWhere('another_column', 'LIKE', '%' . $input . '%')
        // etc
        ->get();
    

    【讨论】:

      【解决方案2】:

      您必须像@JoelHinz 建议的那样为每一列添加一个where 子句。为了简化一点,您可以使用数组和循环:

      $query = Book::query();
      $columns = ['book_name', 'foo', 'bar'];
      foreach($columns as $column){
          $query->orWhere($column, 'LIKE', '%' . $input . '%');
      }
      $books = $query->get();
      

      或者甚至使用架构构建器从您的表中检索所有列名:

      $columns = Schema::getColumnListing('books');
      

      【讨论】:

        【解决方案3】:

        您还可以使用此覆盖函数将条件应用于所有行。

        public function newQuery($excludeDeleted = true) {
                return parent::newQuery()
                    ->where('another_column', 'LIKE', '%' . $input . '%');
            }
        

        Now Book Model 将只提供符合您要求的结果。

        【讨论】:

          猜你喜欢
          • 2021-04-06
          • 1970-01-01
          • 2021-11-06
          • 2019-11-28
          • 2019-05-10
          • 1970-01-01
          • 2019-05-21
          • 2020-09-12
          • 2018-07-16
          相关资源
          最近更新 更多