收入 / 条件构建器
此包已被废弃且不再维护。未建议替代包。
使用条件构建查询
dev-master
2020-06-09 14:31 UTC
Requires (Dev)
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^9.1
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();
结果为拥有状态 1
或 3
、名字“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)。请参阅许可证文件以获取更多信息。