makeabledk/laravel-querykit

v4.1.0 2024-04-08 21:57 UTC

README

Latest Version on Packagist Build Status StyleCI

本软件包提供了一种方便的方式,在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\QueryConstraintWhereBetween

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 国际。有关更多信息,请参阅许可证文件