• Stars
    star
    112
  • Rank 312,240 (Top 7 %)
  • Language
    PHP
  • License
    MIT License
  • Created almost 3 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

CASE statement support for Laravel Query Builder.

Laravel Eloquent CASE Statement Support

Test Status

This packages adds CASE statement support to Laravel Query Builder. It supports Laravel 8.x & 9.x.

Usage

Add a CASE statement select on a Laravel Query

use App\Models\Invoice;
use AgliPanci\LaravelCase\Query\CaseBuilder;

$invoices = Invoice::query()
            ->case(function (CaseBuilder $case) {
                $case->when('balance', '<', 0)->then('Overpaid')
                    ->when('balance', 0)->then('Paid')
                    ->else('Balance Due');
            }, 'payment_status')
            ->get();

Produces the following SQL query:

SELECT
  ( CASE
      WHEN `balance` < 0 THEN 'Overpaid'
      WHEN `balance` = 0 THEN 'Paid'
      ELSE 'Balance Due'
    END ) AS `payment_status`
FROM
  `invoices`

Build the case query separately

use App\Models\Invoice;
use AgliPanci\LaravelCase\Facades\CaseBuilder;

$caseQuery = CaseBuilder::when('balance', 0)->then('Paid')
                    ->when('balance', '>', 0)->then('Balance Due');
                    
$invoices = Invoice::query()
            ->case($caseQuery, 'payment_status')
            ->get();

Raw CASE conditions

use App\Models\Invoice;
use AgliPanci\LaravelCase\Facades\CaseBuilder;

$caseQuery = CaseBuilder::whenRaw('balance = ?', [0])->thenRaw("'Paid'")
                    ->elseRaw("'N/A'")
                    
$invoices = Invoice::query()
            ->case($caseQuery, 'payment_status')
            ->get();

Use as raw SELECT

use App\Models\Invoice;
use \AgliPanci\LaravelCase\Facades\CaseBuilder;

$caseQuery = CaseBuilder::whenRaw('balance = ?', [0])->thenRaw("'Paid'")
                    ->elseRaw("'N/A'")
                    
$invoices = Invoice::query()
            ->selectRaw($caseQuery->toRaw())
            ->get();

Available methods

use AgliPanci\LaravelCase\Facades\CaseBuilder;

$caseQuery = CaseBuilder::whenRaw('balance = ?', [0])->thenRaw("'Paid'")
                    ->elseRaw("'N/A'");
                    
// Get the SQL representation of the query.                    
$caseQuery->toSql(); 

// Get the query bindings.
$caseQuery->getBindings(); 

// Get the SQL representation of the query with bindings.
$caseQuery->toRaw(); 

 // Get an Illuminate\Database\Query\Builder instance.
$caseQuery->toQuery();

Installation

You can install the package via composer:

composer require aglipanci/laravel-eloquent-case

Testing

composer test

Changelog

Please see CHANGELOG for more information what has changed recently.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.