meunik/laravel-edit

根据请求格式自动表格编辑

2.1.0 2024-05-25 03:38 UTC

This package is auto-updated.

Last update: 2024-09-25 04:34:13 UTC


README

Laravel的包装,用于通过请求格式编辑表格Edit table by request format

根据请求格式自动编辑。

编辑机构表格的请求示例。

{
    "id": 1,
    "name": "Example Establishment Name",
    "telephone": [
        {
            "id": 1,
            "number": "(00) 00000-0000",
        },
        {
            "id": 2,
            "numero": "(00) 00000-0000",
        }
    ],
    "Address": {
        "id": 1,
        "zip": "00000-000",
        "address": "Example Establishment Street",
        "number": 653,
        "complement": "nd",
        "neighborhood": "Example Neighborhood",
        "city": "Example City",
        "state": "Example State"
    }
}

首先必须通知模型表格 TableModel::edit($request) 这是起点,在上述json中是 Establishment::class,然后它将逐键读取,如果这些键的值是对象、数组或对象数组,则这些键最初将被视为具有表格关系,然后使用 laravel的Eloquent 对此键进行验证。

支持 $appends,但 $appends 强制与表格中的列同名

安装

仅Laravel

在您的 composer.json 中包含此包并更新 composer。这将下载包和 laravel-edit 以及 Carbon 库。

composer require meunik/laravel-edit

使用

首先必须将特性 HasEdit 添加到模型的 use

    <?php

    namespace App\Models;

    use App\Models\Other\Path\EditGlobalModel;
    use Meunik\Edit\HasEdit;
    use Illuminate\Database\Eloquent\Model;

    class TableModel extends Model
    {
        use HasEdit;

        protected $fillable = ['name'];

        public $editAppends = true;
        public $editModel = EditGlobalModel::class; // You need to set it only if you are going to use Global Model and if it is not in the default \App\Models\EditGlobalModel directory

        public $relationship = [
            'relationshipOne' => RelationshipOne::class,
            'relationshipTwo' => [RelationshipTwo::class], // put it inside an array if the relationship is an array of objects
        ];
    }

要在控制器中使用,必须输入表模型 TableModel::edit($request->all()),然后是数组或请求格式的新值 edit($request),最后执行编辑 ->run()

    TableModel::edit($request)->run();

如果您此时不想更改列。

    TableModel::edit($request->all())->notChange('column1', 'column2')->run();

也可以通过全局模型调用。

    NameEditExempleModel::table(TableModel::class)->values($request)->notChange('column1', 'column2')->run();

在表模型中使用多关系时,必须

    public $relationship = [
        'relationshipOne' => RelationshipOne::class,
        'relationshipTwo' => [RelationshipTwo::class], // put it inside an array if the relationship is an array of objects
    ];

如果您想忽略特定表中的一列或关系,请将其添加到该表的模型中

    public $ignoredColumns = ['column1','column2'];
    public $ignoredRelationships = ['relationship1','relationship2'];

全局模型配置

创建一个模型。

至少必须有一个模型。

    <?php

    namespace Model\Edit;

    use Meunik\Edit\Edit;

    class NameEditExempleGlobalModel extends Edit
    {
        // Add configs and exceptions
    }

定义列名和关系名,这些默认情况下不能更改。

    protected $columnsCannotChange_defaults = [
        'id',
        'column1',
        'column2',
        'pivot',
        'created_at',
        'updated_at',
    ];
    protected $relationshipsCannotChangeCameCase_defaults = [
        'relationship1',
        'relationship2'
    ];

在一对一关系的情况下,如果关系位于请求中且请求中的对象数量为空或少于表中的对象数量,则将排除请求中不存在的对象。

    protected $deleteMissingObjectInObjectArrays = true;

添加预处理和后处理。

    public function before()
    {
        $table = $this->laravelEdit->table;
        $values = $this->laravelEdit->values;
        
        // Code before update.
        
        return $this;
    }

    public function after()
    {
        $table = $this->laravelEdit->table;
        $values = $this->laravelEdit->values;
        $before = $this->laravelEdit->before;
        
        // Code after update.
    }

在编辑之前对值进行预处理。此函数在行编辑之前执行一次。必须返回一个包含将编辑的值的数组,格式如下 ['column' => 'value']。此函数替换来自 Request 的值。

    public function valuesEdit()
    {
        /*
         * Code before update.
         * Example
        */

        $table = $this->laravelEdit->table;
        $values = $this->laravelEdit->values;
        $column = $this->laravelEdit->keysEdit;

        return [
            'column1' => 'value1',
            'column2' => 'value2'
            ...
        ]
    }

向列添加异常。此函数在编辑每个列之前执行,如果返回 true,则将忽略编辑中的列,但可以在此函数中编辑它。如果返回 false,则将自动编辑列。此函数不会更改将编辑的列的值。

    public function exception()
    {
        /*
         * Code before update.
         * Example
        */

        $table = $this->laravelEdit->table;
        $values = $this->laravelEdit->values;
        $column = $this->laravelEdit->attribute;
        $create = $this->laravelEdit->create;

        switch ($column) {
            case "nameColumnException":
                return true;
                break;

            case "nameRelationshipException":
                return true;
                break;

            default:
                return false;
                break;
        }
    }

可以在表的模型中使用 before()after()valuesEdit()exception() 函数,在这种情况下,它将专门用于操作此表的表数据。

许可证

Laravel 的此编辑是开源软件,受 MIT 许可证 授权。