定制 anhtt/laravel-filter-builder 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

anhtt/laravel-filter-builder

Composer 安装命令:

composer require anhtt/laravel-filter-builder

包简介

Easily build Eloquent queries from API requests

README 文档

README

Basic usage

Installation

composer require anhtt/laravel-filter-builder:dev-main

//app/Models/User.php
use AnhTT\FilterBuilder\Filterable;

class User extends Authenticatable
{
   use  Filterable;

FilterConfig a query based on a request: /users?name=John:

use AnhTT\FilterBuilder\FilterConfig;

    $filterConfig = new FilterConfig();
    $filterConfig->setFilters([
            'id' => 'users.id:cn',
            'name' => [
                'users.id:eq',
                'users.name:cn',
            ],
            'email' => 'users.email:eq',
            'email_and_name' => function (Builder $builder, $value) {
                $builder->where('users.name', '=', $value);
                $builder->where('users.email', '=', $value);
            },
            'color_name' => 'colors.name:eq',
            'product_name' => 'products.name:cn',
        ])->setSorts([
            'id' => 'users.id',
            'name' => 'users.name',
        ])->setJoins([
            'products' => ['products', 'products.user_id', '=', 'users.id', 'left'],
            'colors' => ['colors', function (JoinClause $join) {
                $join->on('colors.id', '=', 'products.color_id');
            }],
        ])->setJoinPriority([
            'colors' => ['products']
        ])->setDefaultSort('id:desc');
'eq' => $query->where($column, $value)
'ne' => $query->whereNot($column, $value)
'in' => $query->whereIn($column, $value)
'ni' => $query->whereNotIn($column, $value)
'cn' => $query->where($column, 'like', "%$value%")
'sw' => $query->where($column, 'like', "$value%")

Filter Form:

<?php

namespace App\Filters;

use Illuminate\Database\Query\JoinClause;
use AnhTT\FilterBuilder\FilterForm;

class UserFilterForm extends FilterForm
{

    public function filters(): array
    {
        return [
            'id' => 'users.id:eq',
            'name' => [
                'users.id:eq',
                'users.name:cn',
            ],
            'email' => 'users.email:eq',
            'category_name' => 'categories.name:eq',
            'color_name' => 'colors.name:eq',
            'product_name' => 'products.name:cn',
        ];
    }

    /**
     * @return array
     */
    public function getJoins(): array
    {
        return [
            'products' => ['products', 'products.user_id', '=', 'users.id', 'left'],
            'colors' => ['colors', function (JoinClause $join) {
                $join->on('colors.id', '=', 'products.color_id');
            }],
        ];
    }

    public function getSorts(): array
    {
        return [
            'id' => 'users.id',
        ];
    }

    public function getJoinPriority(): array
    {
        return [
            'colors' => ['products']
        ];
    }

    public function defaultSort(): string
    {
        return 'id:desc';
    }
}
use AnhTT\FilterBuilder\FilterConfig;

   $filterConfig = new UserFilterForm();
   $users = User::filterBuilder($requestData, $filterConfig, request('sort'))->paginate();

License

The MIT License (MIT). Please see License File for more information.

统计信息

  • 总下载量: 3
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-07-27