Using Joins in Laravel Eloquent Queries

Using Joins in Laravel Eloquent Queries

Spread the word! Share with your fellow developers.

Laravel applications which depend heavily on database interaction using Laravel Eloquent often create performance issues.

To improve the performance of your application you have to refactor your queries and keep an eye on the memory consuming queries.

In this post, I will walk you through a very simple example to refactor a query and improve the database response time.

Problem

Consider the sample code below, which use the Product and Category table to return the category name.

$product = Product::where('id', $productId)->first();

$productCategory = Category::where('id', $product->category_id)->pluck('name')->first();

Above code example is simple enough to understand but it uses two separate calls to the database. The first query must return before the second query can be triggered.

Solution

Let’s improve this code example by combining both requests into a single query.

$productCategory = Product:where('id', $productId)
    ->leftJoin('category', 'product.category', '=', 'category.id')
    ->select('product.id','category.name')->first();

Now, what we have just done above?

  • Firstly we target the product based on the productId, exactly same query as the first one.
  • Next, we join the results with category table using the category to product’s category. First query grabbed the Product model which provides us with the access to the catgeory attribute.
  • We select the product id and category name.
  • Finally, we use first() method, which ensures that once it finds a single category which statisfy the requirement, it will resturn the category name instantly.

That’s it. You know have a better understanding of how left join works and you can combine the query to make a single request to the database. It looks fairly simple but using the same method you can optimize the complex queries dealing with multiple tables.

If you have any comments or suggestion, or you find any mistake please let me know by submitting a comment below.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

*
*

This site uses Akismet to reduce spam. Learn how your comment data is processed.

What's New in Laravel 5.8
Laravel 5 was released in February 2015 and current Laravel 5.7 was released in September 2018. We should be expecting...