josueeek/php-filters

提供了一种通过查询字符串进行数据过滤的可组合接口

dev-main 2021-06-16 16:24 UTC

This package is auto-updated.

Last update: 2024-09-17 00:02:10 UTC


README

使用查询字符串进行过滤

此URL

/users?name=test&age=15

自动知道通过返回具有

  • 名称包含 test
  • 年龄为 15

按年龄降序排列记录,而无需您编写样板代码 😱。

设置

  • 在您的终端中运行 composer require josueeek/php-filters 以拉取此包。

使用方法

  • 在您希望进行过滤的模型类中,使用 FilterableTrait,例如
<?php

use Josueeek\Filters\Traits\FilterableTrait;

class User {
  use FilterableTrait;
  ...
}
  • 为该模型创建一个过滤器类,例如 UserFilter
<?php
namespace App\Filters;

use App\User;
use Josueeek\Filters\BaseFilters;
use Illuminate\Http\Request;
use Carbon\Carbon;

class UserFilters extends BaseFilters
{
    public function name($term) {
        return $this->builder->where('users.name', 'LIKE', "%$term%");
    }

    public function company($term) {
        return $this->builder->whereHas('company', function ($query) use ($term) {
            return $query->where('name', 'LIKE', "%$term%");
        });
    }

    public function age($term) {
        $year = Carbon::now()->subYear($age)->format('Y');
        return $this->builder->where('dob', '>=', "$year-01-01")->where('dob', '<=', "$year-12-31");
    }

    public function sort_age($type = null) {
        return $this->builder->orderBy('dob', (!$type || $type == 'asc') ? 'desc' : 'asc');
    }
}

注意每个方法的名称如何映射到每个查询字符串的键,例如在 /users?name=test&age=15&company=my-company&sort_age=desc 中,方法的参数映射到值。

  • 在控制器中注入 UserFilters 😍
<?php

namespace App\Http\Controllers;

use App\User;
use App\Filters\UserFilters;

class UserController extends Controller {

  public function index(Request $request, UserFilters $filters)
  {
      return User::filter($filters)->get();
  }
}

这就完成了! 💃

现在,您可以通过执行应用程序并使用允许的查询字符串的变体来使用它。 🔥🔥🔥