收入/条件构建器

此包已被废弃且不再维护。未建议替代包。

使用条件构建查询

dev-master 2020-06-09 14:31 UTC

This package is auto-updated.

Last update: 2023-06-09 21:36:22 UTC


README

通过不同方式构建Laravel的条件构建器。

要求

  • PHP >= 7.0
  • Laravel >= 5.x

安装

composer require reishou/criteria-builder

用法

首先,您需要创建一个继承自抽象类 Reishou\Criteria\Criteria 的类

<?php

namespace App\Criteria;

use Reishou\Criteria\Criteria;

class UserCriteria extends Criteria
{
    protected $criteria = [
        'status',
        'name' => 'like',
        'age',
    ];
}

然后,您可以使用它

$param = ['status' => [1, 3], 'name' => 'Reishou', 'age' => 30];

$query = User::query();
$criteria = new UserCriteria($param);
$criteria->apply($query);

$query->get();

结果为拥有状态 13、名字“like” Reishou 和年龄 = 30 的用户列表。默认情况下,条件将应用带有 AND 操作符的 where 子句。如果您想使用带有 OR 操作符的 where 子句,您应该创建一个自定义方法。

自定义方法

UserCriteria 添加一个函数,格式为 criteria{KeyNameWithStudlyCapsFormat}

protected function criteriaStatus($query, $value)
{
    $statuses = is_array($value) ? $value : [$value];
    $query->where(function ($query) use ($statuses) {
        foreach ($statuses as $status) {
            $query->orWhere($this->getTable() . '.status', $status);
        }
    });
}

排序选项

此外,我们可以使用 SortOptions 来设置一些排序规则

/GET <URL>/users?sort=-status,name 

创建一个类 UserSortOptions 继承自 Reishou\Criteria\SortOptions

class UserSortOptions extends SortOptions
{
    protected $sorts = [
        'status',
        'name',
    ];

    protected $default = [
        ['status', 'desc'],
        ['name', 'asc'],
    ];
}

$sorts 是一个包含可排序字段的数组。

使用 UserSortOptions 的方式与使用 UserCriteria 相同

$param = ['sort' => '-status,name'];

$sort  = new UserSortOptions($param);
$query = User::query();
$sort->apply($query);

$query->get();

-status 表示按 status 列排序并按 desc 排序 name 表示按 name 列排序并按 asc 排序

测试

使用以下命令运行测试

./vendor/bin/phpunit

许可证

MIT 许可证 (MIT)。请参阅许可证文件以获取更多信息。