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

Laravel 如何从数据库中的多个列获取搜索查询,laravel,laravel-5.2,Laravel,Laravel 5.2,我有一个搜索表单,可以从名为books的表中获取信息 现在我正在使用这个控制器 public function search(Request $request) { $keyword = $request->input('keyword'); $query = Book::where('judul', 'LIKE', '%' . $keyword . '%'); $book_list = $query->paginate(5); $paginatio

我有一个搜索表单,可以从名为books的表中获取信息

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

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'));
}
问题是我从请求中获得的数据仅适用于judul。如果输入关键字搜索指向搜索写入者或发布者,则只显示空结果

我希望搜索表单能够从名为writerspublisher


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

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

1.您可以使用:

2.使用:

3.执行以下操作:

$books = Book::query();

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

$books = $books->get();

你可以用orwhere来填充这个,就像这样

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

我希望它能帮到你。

使用搜索插件会让事情变得更简单@SapneshNaik hi非常感谢您的建议,我会尝试一下,但由于我是laravel和PHP的begginer,我需要用“手动”方法解决这个问题。@YudyAnanda您的意思是您需要将同一关键字与编写者和发布者匹配吗?@MKhalidJunaid hi,我的意思是我需要seach表单能够从其中3个获取数据(专栏:judul,publisher,Writer)不仅仅是judul谢谢你的回答,那么我应该更改哪部分?看起来还是只获取judul,其他专栏(Writer和publisher)呢?@YudyAnanda如果这些专栏在同一个表中,这些示例将获取所有的专栏。我想你添加了类似于
select()
如果您没有获得某些列,请转到查询。我尝试了
$books=Book::query();…
但在Macroable.php第74行:方法paginate不存在。@YudyAnanda我刚刚在5.3和5.5上尝试了这个方法,效果很好。对于5.2,您可以尝试
newQuery()
而不是
query()
$books = Book::query();

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

$books = $books->get();
Book::where(function ($query) use($keyword) {
        $query->where('judul', 'like', '%' . $keyword . '%')
           ->orWhere('writters', 'like', '%' . $keyword . '%');
      })
->get();