How to Eloquent when Condition in Laravel?

Dec 14, 2022 . Admin



Hello Friends,

In this article we will cover on how to implement laravel eloquent when condition. i would like to show you laravel eloquent if condition. i explained simply step by step laravel eloquent when example. i explained simply step by step laravel eloquent when where.

Laravel eloquent added new function call when(), using when() you can ignore to write manually if conditional statement. i will give you some example how to use it when and how to write if condition with eloquent query builder. you can also use when() with laravel 6, laravel 7, laravel 8 and laravel 9 version:

Step 1: Install Laravel

This is optional; however, if you have not created the laravel app, then you may go ahead and execute the below command:

composer create-project laravel/laravel example-app
Step 2: Laravel Eloquent Query with If Statement

In this case, our Laravel eloquent query uses an if statement to evaluate whether the filter value is made up of authenticated users or unverified users based on the request.

App/Http/Controllers/UserController
<?php
  
namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     * @return Renderable
     */
     
    public function index(Request $request)
    {
        $users = User::query();

        if($request->get('filter') == 'verified') {
            $users->whereNotNull('email_verified_at');
        }

        if($request->get('filter') == 'unverified') {
            $users->whereNull('email_verified_at');
        }

        $users = $users->get();

        print_r($users); die;
    }
}
Step 3: Laravel Eloquent Query with when() method App/Http/Controllers/UsersController
<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     * @return Renderable
     */

    public function index(Request $request)
    {
        $users = User::query();

        $users->when($request->get('filter') == 'verified', function($users) {
            $users->whereNotNull('email_verified_at');
        });

        $users->when($request->get('filter') == 'unverified', function($users) {
            $users->whereNull('email_verified_at');
        });

        $users = $users->get();

        print_r($users); die;
    }
}    
Step 4: Laravel Eloquent Query with If-Else Statement

In this example, we have a query with an if-else statement which is the default is order by descending with created_at field.

App/Jobs/Controllers/UserController
<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     * @return Renderable
     */

    public function index(Request $request)
    {
        $users = User::query();

        if($request->has('order_by') && $request->get('order_by') == 'last_login') {
            $users->orderBy('last_login', 'desc');
        } else {
            $users->orderBy('created_at', 'desc');
        }

        $users = $users->get();

        print_r($users); die;
    }
}
Step 5: Laravel Eloquent When() Else Example

In this example, if we have the else-if statement above then now we will have the when() else method which is still the default in ordered by descending with created_at field. If true then it will order by last_login.

App/Jobs/Controllers/UserController
namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     * @return Renderable
     */

    public function index(Request $request)
    {
        $users = User::query();

        $users->when($request->has('order_by') && $request->get('order_by') == 'last_login', function($users) {
            $users->orderBy('last_login', 'desc');
        }, function($users) {
            $users->orderBy('created_at', 'desc');
        });

        $users = $users->get();

        print_r($users); die;
    }
}

I hope it can help you...

#Laravel