makeabledk / laravel-querykit
Requires
- php: ^8.1
- illuminate/support: ^9.0|^10.0|^11.0
Requires (Dev)
- nesbot/carbon: ^2.72.3
- orchestra/testbench: ^7.0|^8.0|^9.0
- phpunit/phpunit: ^9.6|^10.5
This package is auto-updated.
Last update: 2024-09-08 22:45:34 UTC
README
本软件包提供了一种方便的方式,在Laravel中对模型实例上的Eloquent范围进行查询。
传统上,你可能会在模型上找到一个scopeAccepted
,然后额外添加一个ìsAccepted
辅助方法。
再见,代码重复。QueryKit来拯救! 🔥
--
Makeable是一家位于丹麦奥尔胡斯的网络和移动应用代理机构。
安装
您可以通过composer安装此软件包
composer require makeabledk/laravel-querykit
对于5.5版本之前的Laravel:将服务提供者添加到您的config/app.php中
'providers' => [ ... Makeable\QueryKit\QueryKitServiceProvider::class, ];
使用
每当您有一个Eloquent模型上的查询范围时,您都可以应用以下特质来添加QueryKit
class Job extends Eloquent { use \Makeable\QueryKit\QueryKit; public function scopeHired($query) { return $query->whereIn('status', ['started', 'finished']); } }
Laravel为我们提供了一个方便的方法来查询数据库
Job::hired()->first(); // a job with either 'started' or 'finished' status
但使用query-kit,您现在也可以检查一个模型实例是否通过了一个给定的范围
$startedJob->passesScope('hired'); // true $pendingJob->passesScope('hired'); // false
真是太酷了,对吧?
支持比这个简单示例更复杂的功能。
请参阅下面的当前支持的方法。
QueryKit提供的方法
passesScope
/** * Check if a model passes the given scope * * @param $name * @param array ...$args * @return bool */ public function passesScope($name, ...$args)
failsScope
/** * Check if a model fails the given scope * * @param $name * @param array ...$args * @return bool */ public function failsScope($name, ...$args)
当前支持的方法
截至目前,QueryKit支持以下查询方法
- orWhere
- orWhereIn
- orWhereBetween
- orWhereDate
- orWhereDay
- orWhereMonth
- orWhereNotBetween
- orWhereNotIn
- orWhereNotNull
- orWhereNull
- orWhereTime
- orWhereYear
- where
- whereIn
- whereBetween
- whereDate
- whereDay
- whereMonth
- whereNotBetween
- whereNotIn
- whereNotNull
- whereNull
- whereTime
- whereYear
- whereColumn
QueryKit尝试支持Eloquent Builder支持的绝大多数参数类型,但可能存在例外。
此外,请注意,高级连接和关系查询可能无法正常工作。
扩展QueryKit
假设您想为Laravel QueryBuilder的'whereBetween'方法添加功能
创建一个实现 \Makeable\QueryKit\Contracts\QueryConstraint 的 WhereBetween。
class WhereBetween implements \Makeable\QueryKit\Contracts\QueryConstraint { public function __construct(...$args) { // Accept scope arguments here } public function check($model) { // Return boolean } }
然后,在AppServiceProvider的register方法中注册该约束
public function register() { \Makeable\QueryKit\Builder\Builder::registerConstraint(WhereBetween::class); }
您还可以使用上述方法来覆盖现有实现。
相关软件包
请确保查看我们的makeabledk/laravel-eloquent-status软件包,该软件包简化了您在应用程序中处理模型状态的方式。
测试
您可以使用以下命令运行测试
composer test
贡献
我们很高兴接受为附加功能提交的pull请求。有关详细信息,请参阅CONTRIBUTING。
鸣谢
许可证
署名-相同方式共享 4.0 国际。有关更多信息,请参阅许可证文件。