This packages adds CASE statement support to Laravel Query Builder. It supports Laravel 8.x, 9.x, 10.x & 11.x.
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`
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();
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 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();
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();
You can install the package via composer:
composer require aglipanci/laravel-eloquent-case
composer test
Please see CHANGELOG for more information what has changed recently.
If you discover any security related issues, please email agli.panci@gmail.com instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.