Laravel Multiple Model Search: Queries, Scout, Packages

If you want to search in multiple Eloquent models - like posts, videos, and courses - there are a lot of different ways, with or without external packages and tools. Let's explore them in this article.

First, the example we will be working on. Three simple DB tables:

  • posts
  • videos
  • courses

Global search - table 1

Global search - table 2

Global search - table 3

Each table has its Eloquent model, and we want to query those tables and get results like this:

Global search - results

So, what are our options? Let's go from the most simple one to adding more tools later.


Simple: Three Separate Queries

This is the most straightforward, almost "dumb" way to perform the task. Why group or optimize something, if you can just query the tables separately?

Controller:

1$keyword = request('keyword');
2$results['posts'] = Post::where('title', 'like', '%' . $keyword . '%')->get();
3$results['videos'] = Video::where('title', 'like', '%' . $keyword . '%')->get();
4$results['courses'] = Course::where('title', 'like', '%' . $keyword . '%')->get();
5 
6return view('search', compact('results'));

And then in the Blade, you just show three...

The full tutorial [9 mins, 1748 words] is only for Premium Members

Become a Premium Member for $129/year or $29/month

Recent Premium Tutorials