Laravel filter a value in all columns

佐手、 提交于 2021-02-08 07:45:23

问题


public function getBooks($input)
{
    $books= Book::where('book_name', 'LIKE', '%' . $input . '%')->get();
    return Response::json($books);
}

I know how to filter a column by a given value. But how do I filter ALL columns by a given value. For example, I have a column called 'category' where user should be able to use the same search bar to filter the category.

Something like:

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

Thanks!


回答1:


Most databases do not support searching all columns simultaneously. I'm afraid you'll likely have to chain all of the columns together:

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



回答2:


You have to add a where clause for each column like @JoelHinz suggests. To simplify things a bit you can use an array and a loop:

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

Or even use the schema builder to retrieve all column names from your table:

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



回答3:


You can also use this override function to apply condition to all rows.

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

Now Book Model will provide only result who match your requirement.



来源:https://stackoverflow.com/questions/28543166/laravel-filter-a-value-in-all-columns

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!