如何从数据库中的多个列获取搜索查询

Yud*_*nda 3 laravel laravel-5.2

我有搜索表格以从名为book的表中获取信息。

现在我正在使用这个控制器

public function search(Request $request)
{
    $keyword = $request->input('keyword');
    $query = Book::where('judul', 'LIKE', '%' . $keyword . '%');

    $book_list = $query->paginate(5);
    $pagination = $book_list->appends($request->except('page'));
    $total_book = $book_list->total();
    return view('dashboards.index', compact('book_list', 'keyword', 'pagination', 'total_book'));
}
Run Code Online (Sandbox Code Playgroud)

问题是我从请求中获得的数据仅可用于judul。如果输入关键字搜索指向搜索编写者或发布者,则只会显示空结果

我希望搜索表单能够从名为writtersPublisher的其他列中获取数据

有什么方法可以从多列中获取数据?

Rit*_*tri 10

您可以使用orwhere来完成此操作,例如

Book::where(function ($query) use($keyword) {
        $query->where('judul', 'like', '%' . $keyword . '%')
           ->orWhere('writters', 'like', '%' . $keyword . '%');
      })
->get();
Run Code Online (Sandbox Code Playgroud)

希望对您有帮助。


Ale*_*nin 3

您可以通过多种方式执行条件查询。

1.您可以使用when()

Book::when($keyword, function ($q) use ($keyword) {
        return $q->where('judul', 'LIKE', '%' . $keyword . '%');;
    })
    ->get();
Run Code Online (Sandbox Code Playgroud)

2.使用where闭包

Book::where(function($q) use ($keyword, $request) {
        if ($request) {
            $q->where('judul', 'LIKE', '%' . $keyword . '%');
        }
    })
    ->get();
Run Code Online (Sandbox Code Playgroud)

3.这样做:

$books = Book::query();

if ($request) {
    $books = $books->where('judul', 'LIKE', '%' . $keyword . '%');
}

$books = $books->get();
Run Code Online (Sandbox Code Playgroud)