问题
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