Sling Academy
Home/PHP/Laravel Query Builder: Select rows where IDs are in an array

Laravel Query Builder: Select rows where IDs are in an array

Last updated: January 16, 2024

Introduction

Laravel, a popular PHP web application framework, provides developers with various tools to interact with the database. One powerful component within Laravel is the Eloquent ORM, but for those situations where a more fluent database interaction is desired, the Laravel Query Builder comes in handy. A common scenario developers might encounter is selecting rows from a database where the IDs of those rows are present within a given array. This tutorial will guide you through using Laravel’s Query Builder to select rows based on an array of IDs.

Getting Started with Laravel Query Builder

Before diving into querying rows based on IDs from an array, let’s set up a basic understanding of the Laravel Query Builder. The Query Builder allows you to construct your queries using fluent, chainable methods, making it easy to write clean and readable database interactions.

Here is a simple example of using the Query Builder to retrieve all rows from the users table:

$users = DB::table('users')->get();

This line of code selects all the rows from the users table and returns a Collection of results. This foundational knowledge is essential before filtering the results further.

Basic Selection of Rows by IDs

To select rows from a table where the identifiers are in a provided array, we use the whereIn clause of the Query Builder. The whereIn method accepts two arguments: the name of the column to evaluate and the array of values to compare against.

For example, if you have an array of user IDs and you want to retrieve those exact users, your query might look like this:

$userIds = [1, 2, 3]; $users = DB::table('users')->whereIn('id', $userIds)->get();

This will only retrieve users who have an ID of 1, 2, or 3. The output will be a Collection containing User models that match the IDs provided in the array.

Advanced Usage of whereIn

Laravel’s Query Builder also allows for more complex conditions using whereIn. Suppose you only want to select users who are in a certain array of IDs and meet other criteria, such as being active:

$userIds = [1, 2, 3]; $activeUsers = DB::table('users') ->whereIn('id', $userIds) ->where('active', 1) ->get();

Selecting rows based on conditions of a related table sometimes requires subqueries. Consider an example where you want to retrieve users based on groups to which they belong, using group IDs stored in the array. You can utilize a subquery within whereIn to achieve this effect:

$groupIds = [10, 20, 30];
$usersInGroups = DB::table('users')
 ->whereIn('id', function ($query) use ($groupIds) {
 $query->select('user_id')
 ->from('group_user')
 ->whereIn('group_id', $groupIds);
 })
 ->get();

This above code snippet creates a subquery for the user IDs that belong to the specified groups and then selects users based on those IDs. The output will be a Collection of User models that are part of the given groups.

Working with Eloquent Models

While we commonly use the Query Builder, often you might prefer running such queries using Eloquent. Eloquent models provide a more object-oriented approach to your database interactions. Similar to using the Query Builder, Eloquent allows for the fluent chaining of query conditions:

// Assuming User is an Eloquent model representing the users table
$userIds = [1, 2, 3];
$users = User::whereIn('id', $userIds)->get();

This will give you a Collection of User instances where the ID is within the specified array. You can also combine this with other query conditions and relationships.

Pagination of Results

There will be scenarios where the expected output is large, and we might need pagination. Laravel provides a simple way to paginate the results obtained from a query:

$userIds = [1, 2, 3, 4, 5];
$paginatedUsers = DB::table('users')
 ->whereIn('id', $userIds)
 ->paginate(10);

With this, you get a Paginator instance that contains the users, with the added benefits of being able to render pagination links within your views. The second parameter of the paginate method dictated how many items per page should be shown.

Conclusion

Through this tutorial, we elaborated on selecting rows in Laravel using the Query Builder where the row IDs match a set of values within an array. This approach is incredibly powerful and allows for both simplicity and complexity in your queries, catering to the needs of your application. With these tools, efficient and elegant database interactions are at your fingertips, ensuring your applications remain robust, scalable, and maintainable.

Next Article: 4 Ways to Define Model in Eloquent (Laravel)

Previous Article: Laravel Query Builder: ‘GREATER THAN’ and ‘LESS THAN’ Operators

Series: Laravel & Eloquent Tutorials

PHP

You May Also Like

  • Pandas DataFrame.value_counts() method: Explained with examples
  • Constructor Property Promotion in PHP: Tutorial & Examples
  • Understanding mixed types in PHP (5 examples)
  • Union Types in PHP: A practical guide (5 examples)
  • PHP: How to implement type checking in a function (PHP 8+)
  • Symfony + Doctrine: Implementing cursor-based pagination
  • Laravel + Eloquent: How to Group Data by Multiple Columns
  • PHP: How to convert CSV data to HTML tables
  • Using ‘never’ return type in PHP (PHP 8.1+)
  • Nullable (Optional) Types in PHP: A practical guide (5 examples)
  • Explore Attributes (Annotations) in Modern PHP (5 examples)
  • An introduction to WeakMap in PHP (6 examples)
  • Type Declarations for Class Properties in PHP (5 examples)
  • Static Return Type in PHP: Explained with examples
  • PHP: Using DocBlock comments to annotate variables
  • PHP: How to ping a server/website and get the response time
  • PHP: 3 Ways to Get City/Country from IP Address
  • PHP: How to find the mode(s) of an array (4 examples)
  • PHP: Calculate standard deviation & variance of an array