laravel-expansions/query-control-model

QueryControlModel

v1.0.2 2022-07-25 17:57 UTC

This package is auto-updated.

Last update: 2024-09-25 22:21:10 UTC


README

无需GraphQL。这是您模型的高级查询控制。

扩展查询字符串参数

await axios.get('/api/my-models', {
    params: {
        
        /* Select and Append control */
        
        select: 'id,name',      // <-- select columns
        with: 'items.subItems', // <-- append with relation
        withCount: 'items',     // <-- append relation count
        limit: 10,              // <-- limit count
        
        /* Response type control */

        count: true,            // <-- count response
        // or
        paginate: 10,           // <-- pagination count
        page: 1,                // <-- pagination page
        // or
        // default: model list
    }
})

安装

composer require laravel-expansions/query-control-model

自动设置 - 覆盖 artisan 模板

发布到 /stubs 模板文件。

php artisan vendor:publish --tag=expansion-qcm-stubs

接下来创建模型。

php artisan make:model SomeModel --controller --resource

手动设置

在您的模型上使用 QueryControlModel。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use LaravelExpansions\QueryControlModel\Traits\QueryControlModel;// <-- add

class MyModel extends Model
{
    use HasFactory;
    use QueryControlModel;// <-- set

    public function scopeQueryFilter($query)
    {
        return $query;// add your local scopes
    }
}

并在控制器方法上设置作用域。

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\MyModel;

class MyModelController extends Controller
{
    public function index()
    {
        return MyModel
        ::queryControll()
        ->queryFilter()
        ->queryGet();
    }

    public function show($id)
    {
        return MyModel
        ::queryControl()
        ->queryFilter()
        ->findOrFail($id);
    }

    ...
}