michaelnabil230 / laravel-query-conditions
这是我制作的laravel-query-conditions包
v1.0.0
2022-07-07 17:17 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^9.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- nunomaduro/collision: ^6.0
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-09 06:26:21 UTC
README
这里应该放置你的描述。请限制在一段或两段内。考虑添加一个小示例。
安装
您可以通过composer安装此包
composer require michaelnabil230/laravel-query-conditions
准备您的模型
要将查询条件与模型关联,模型必须实现以下接口和特质
use Illuminate\Database\Eloquent\Model; use MichaelNabil230\QueryConditions\Support\Condition; use MichaelNabil230\QueryConditions\Concerns\HasQueryCondonation; use MichaelNabil230\QueryConditions\Interfaces\QueryCondonation as InterfacesQueryCondonation; use Illuminate\Database\Eloquent\Builder; class YourModel extends Model implements InterfacesQueryCondonation { use HasQueryCondonation; public function parseQBRule(Builder $query, Condition $condition, string $method): void { if ($condition->rule === 'age') { $query->{$method}('age', $condition->operator, $condition->value); } if ($condition->rule === 'created_at') { $query->{$method}('created_at', $condition->operator, $condition->value); } } }
准备Vue
import './bootstrap'; window.Vue = require('vue').default; import QueryBuilder from './components/QueryBuilder.vue' const app = new Vue({ el: '#app', components: { QueryBuilder }, methods: { getResults: function () { axios.post('/results', { query: this.query }).then(response => { this.results = response.data; console.log({ response }); }); } }, data() { return { query: {}, rules: [ { type: "numeric", id: "age", label: "Age" }, { type: "select", id: "job_title", label: "Job Title", choices: [ { label: 'Regional Manager', value: 'Regional Manager' }, { label: 'Assistant to the Regional Manager', value: 'Assistant to the Regional Manager' }, { label: 'Sales Associate', value: 'Sales Associate' }, ] }, { type: "numeric", id: "has_orders", label: "has Orders", operators: ['=', '>='] }, ], }; } });
首先在blade或vue中调用指令(并传递条件)
现在
<div id="app"> <query-builder :rules="rules" v-model="query" :clickable="getResults"></query-builder> </div>
下一个版本
$condonations = [ Text::make('Name'), Number::make('Age')->min(1)->max(1000), Select::make('Job title', 'job_title')->options([ 'R' => 'Regional Manager', 'A' => 'Assistant to the Regional Manager', 'S' => 'Sales Associate', ]) ];
<div id="app"> <query-builder :condonations="condonations" v-model="query" :clickable="getResults"></query-builder> </div> <script> let condonations = @json($condonations) </script>
最终前往控制器
namespace App\Http\Controllers; use Illuminate\Http\Request; use MichaelNabil230\QueryConditions\QueryConditions; use App\Models\User; class ConditionController extends Controller { public function getDataFromQueryConditions(Request $request) { $users = QueryConditions::for(User::class, $request->input('query')) ->get(); return [ 'users' => $users, ]; } }
一些包的截图,这是一个最好的包
待办事项
- 格式化文档
- 在条件中添加分组
- 测试复杂查询
- 在前端实现
Fields
类 - 添加单元测试
测试
composer test
支持
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全漏洞
请查看我们的安全策略以了解如何报告安全漏洞。
鸣谢
许可协议
MIT许可(MIT)。请参阅许可文件以获取更多信息。