Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
529 views
in Technique[技术] by (71.8m points)

php - Laravel filter a value in all columns

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!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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');

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...