entense / laravel-eloquent-case
为 Laravel 查询构建器添加 CASE 语句支持。
1.0.0
2022-04-07 09:19 UTC
Requires
- php: ^7.4|^8.0
- illuminate/database: ^8.0|^9.0
- illuminate/support: ^8.0|^9.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.6
- nunomaduro/larastan: ^1.0
- orchestra/testbench: ^6.23.0|^7.0.0
- phpunit/phpunit: ^9.3.9
This package is auto-updated.
Last update: 2024-09-20 13:04:20 UTC
README
此包为 Laravel 查询构建器添加 CASE 语句支持。它支持 Laravel 8.x 及 9.x。
用法
在 Laravel 查询中添加 CASE 语句选择
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();
生成以下 SQL 查询
SELECT ( CASE WHEN `balance` < 0 THEN 'Overpaid' WHEN `balance` = 0 THEN 'Paid' ELSE 'Balance Due' END ) AS `payment_status` FROM `invoices`
单独构建 CASE 查询
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();
原始 CASE 条件
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();
用作原始 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();
可用方法
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();
安装
您可以通过 composer 安装此包
composer require aglipanci/laravel-eloquent-case
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的信息。
安全
如果您发现任何安全问题,请通过电子邮件 agli.panci@gmail.com 联系我们,而不是使用问题跟踪器。
致谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。