matteomeloni/laravel-rest-ql

通过HTTP请求将查询构建到Laravel模型中的简单方法

1.0.5 2023-01-18 17:46 UTC

This package is auto-updated.

Last update: 2024-09-18 23:11:30 UTC


README

Latest Version on Packagist Total Downloads MIT Licensed

通过HTTP请求将查询构建到Laravel模型中的简单方法。

安装

通过Composer

$ composer require matteomeloni/laravel-rest-ql

使用方法

通过Matteomeloni\LaravelRestQl\LaravelRestQl扩展你的模型

<?php

namespace App\Models;

use Matteomeloni\LaravelRestQl\LaravelRestQl;

class Book extends LaravelRestQl
{
    //
}

在控制器中,你可以使用restQl作用域来执行新的查询

<?php

namespace App\Http\Controllers;

use App\Models\Book;

class BookController extends Controller
{
    public function index()
    {

        $books = Book::restQL()
            ->get();

        return response()->json($books);
    }
}

如何构建查询

构建查询有三种方式。

传递数组

<?php

namespace App\Http\Controllers;

use App\Models\Book;

class BookController extends Controller
{
    public function index()
    {
        $data = [
            'search' => ''
            'columns' => [],
            'filters' => [],
            'sorts' => []
        ];

        $books = Book::restQL($data)->get();

        return response()->json($books);
    }
}

通过HTTP请求传递数据。

你可以通过http url参数http请求头传递数据。

在这种情况下,格式是JSON,你可以使用base64进行数据编码。

<?php

//Route: /api/books?select=[]&filters=[]&sorts=[]&search=''

namespace App\Http\Controllers;

use App\Models\Book;

class BookController extends Controller
{
    public function index()
    {
        $books = Book::restQL()->get();

        return response()->json($books);
    }
}

示例

选择列

URL: /api/books
Parameter: columns


/api/books?columns=["title", "description"]

搜索字符串

在表的全部列或可填充属性中搜索字符串。

URL: /api/books
Parameter: search


/api/books?search=laravel

WHERE条件

可用的比较运算符:= != < <= > >= like not like in not in between not between null not null

URL: /api/books
Parameter: filters

/api/books?filters=[{"column":"category_id","operator":"=","value":1}]

/api/books?filters=[{"column":"category_id","operator":"between","value":[1,10]}]

/api/books?filters=[{"column":"category_id","operator":"in","value":[1,3,5]}]

/api/books=filters=[{"column":"category_id","operator":"=","value":1},{"column":"title","operator":"like","value":"PHP"}]

可以通过逻辑或将两个或多个条件连接起来。

URL: /api/books
Parameter: filters

/api/books?filters=[{"column":"category_id","operator":"=","value":1},{"column":"category_id","operator":"=","value":3,"boolean":"or"}]

多个"WHERE"子句可以分组在括号中以在查询中实现逻辑分组。

URL: /api/books
Parameter: filters

/api/books?filters=[{"column":"title","operator":"like","value":"PHP"},[{"column":"category_id","operator":"=","value":1},{"column":"category_id","operator":"=","value":3,"boolean":"or"}]]

排序

URL: /api/books
Parameter: sorts

/api/books?sorts=[{"column":"title"}]

/api/books?sorts=[{"column":"title", "direction":"desc"}]

/api/books?sorts=[{"column":"title"},{"column":"category_id","direction":"desc"}]

要求

  • php 8.0或更高版本

  • Laravel 9

测试

$ composer test

变更日志

请参阅变更日志了解最近的变化。

贡献

请参阅contributing.md了解详细信息和一个待办事项列表。

安全

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

鸣谢

许可

MIT。请参阅许可文件了解更多信息。