doncadavona/eloquenturl

轻松通过查询参数搜索和过滤 Laravel Eloquent 模型。

v0.4.36 2023-05-19 06:32 UTC

This package is not auto-updated.

Last update: 2024-09-29 06:31:04 UTC


README

Latest Version on Packagist Total Downloads Build Status StyleCI

Eloquenturl 会自动为您的 Eloquent 模型添加搜索和过滤功能,使用的是 查询字符串

Eloquenturl 尊重您 Eloquent 模型的 $fillable$hidden 属性,以提供合理的默认值,提供零配置使用。例如

return \Doncadavona\Eloquenturl\Eloquenturl::eloquenturled(\App\Models\User::class, $request);

只需传递模型和请求,模型就变得可搜索和可过滤,无需您管理哪些属性是可查询的,也不需要编写复杂的逻辑和数据库查询。

Eloquenturl 很快,因为它作为一个单独的数据库查询构建和执行。

阅读 Eloquenturl: A Laravel Package to Simplify or Eliminate Query Building for URL Parameters

目录

I. 安装

使用 Composer 安装

composer require doncadavona/eloquenturl

II. 使用方法

Eloquenturl::eloquenturled()

使用 Eloquenturl::eloquenturled() 快速构建和执行基于请求查询参数的数据库查询。它返回给定 Eloquent 模型的分页条目,基于 URL 参数和模型的 $fillable$hidden 属性。只需传递模型和请求

$users = \Doncadavona\Eloquenturl\Eloquenturl::eloquenturled(User::class, request());

Eloquenturl::eloquenturl()

当您需要添加额外的查询,例如预加载,或 Laravel 查询构建器中可用的任何其他数据库查询时,请使用 Eloquenturl::eloquenturl()

以下是一个包含多个示例的 UsersController

<?php

use App\Models\User;
use App\Models\Article;
use App\Http\Controllers\Controller;
use Doncadavona\Eloquenturl\Eloquenturl;
use Illuminate\Http\Request;

class UsersController extends Controller
{
    public function index(Request $request)
    {
        // It's this easy.
        $users = Eloquenturl::eloquenturled(User::class, $request);

        // Or, add your own sauce.
        $users = Eloquenturl::eloquenturl(User::class, $request)
            ->with(['roles', 'articles', 'comments'])
            ->paginate();
        
        // Or, with select query and simplePaginate
        $users = Eloquenturl::eloquenturl(User::class, $request)
            ->select('name', 'description')
            ->simplePaginate($request->per_page);

        return $users;

        // Or, use any other Eloquent model.
        $articles = Eloquenturl::eloquenturl(Article::class, $request)
            ->with(['user', 'comments'])
            ->get();

        return $articles;
    }
}

以下是一些带有查询参数的示例 URL

https://:8000/users?search=apple

https://:8000/users?order_by=created_at&order=desc

https://:8000/users?scopes[role]=admin&scopes[status]=active&company_id=3

https://:8000/users?search=apple&search_by=first_name&order_by=created_at&order=desc&scopes[role]=admin&scopes[status]=active&company_id=3

III. 查询参数

  • page
  • per_page
  • search
  • search_by
  • order
  • order_by
  • 作用域
  • lt (小于)
  • gt (大于)
  • lte (小于或等于)
  • gte (大于或等于)
  • min (gte 的别名)
  • max (lte 的别名)

page

/users?page=5

per_page

/per_page?page=100

search

/users?search=john
/users?search=john+doe
/users?search=john%20doe

search_by

/users?search=john&search_by=first_name
/users?search=john+doe&search_by=last_name
/users?search=johndoe&search_by=email

order

/users?order=desc

order_by

/users?order_by=age

作用域

/users?scopes[status]=active
/users?scopes[senior]
/users?scopes[admin]

lt (小于)

/users?lt[age]=18

gt (大于)

/users?gt[age]=17

lte (小于或等于)

/users?lte[age]=18

gte (大于或等于)

/users?gte[age]=60

min (gte 的别名)

/users?min[age]=18

max (lte 的别名)

/users?max[age]=18

当请求中存在未知参数时,它们将使用 WHERE 子句 以等价条件进行查询。例如

/users?active=true
/users?status=suspended
/users?country=PH
/users?planet_number=3
/users?company_id=99

等效的数据库查询将是

SELECT * FROM `users` WHERE `active` = true;
SELECT * FROM `users` WHERE `status` = 'suspended';
SELECT * FROM `users` WHERE `country` = 'PH';
SELECT * FROM `users` WHERE `planet_number` = 3;
SELECT * FROM `users` WHERE `company_id` = 99;

IV. 更新日志

请参阅 changelog 了解最近的变化。

V. 测试

$ composer test

VI. 贡献

请参阅 contributing.md 了解详细信息和工作列表。

VII. 安全

如果您发现任何与安全相关的问题,请通过电子邮件 dcadavona@gmail.com 联系,而不是使用问题跟踪器。

VIII. 致谢

IX. 许可证

MIT。有关更多信息,请参阅 license 文件