kolirt/laravel-master-model

简化Laravel中模型操作、保存关系和上传文件的包

4.0.1 2024-09-11 09:39 UTC

This package is auto-updated.

Last update: 2024-09-11 09:41:05 UTC


README

Laravel Master Model是一个用于Laravel框架的强大包,简化了模型操作,尤其是在保存关系和上传文件方面。

此包旨在为希望优化数据库和文件操作过程的开发者设计,以降低代码复杂性和提高性能。

结构

Buy Me A Coffee

入门

要求

  • PHP >= 8.1
  • Laravel >= 10

安装

composer require kolirt/laravel-master-model

设置

发布配置文件

php artisan master-model:install

在模型中使用MasterModel特性

use Kolirt\MasterModel\MasterModel;

class Item extends Model
{
    use MasterModel;
}

控制台命令

  • master-model:install - 安装主模型包
  • master-model:publish-config - 发布配置文件

使用案例

保存文件

class Item extends Model
{
    use MasterModel;

    protected $fillable = [
        'image',
    ];
}

MasterModel自动保存文件并删除旧文件(如果存在)

class ExampleController extends Controller
{
    public function index(Request $request, $id)
    {
        $data = $request->validate([
            'image' => 'required|file',
        ]);

        $item = Item::query()->findOrFail($id);
        $item->update($data);
    }
}

可以为每个文件指定文件夹和磁盘

class Item extends Model
{
    use MasterModel;

    protected $fillable = [
        'image',
    ];
    
    protected string $upload_model_folder = 'items';

    protected array $upload_folders = [
        'image' => 'image',
    ];

    protected array $upload_disks = [
        'image' => 'public'
    ];
}

删除文件

可以通过设置字段为null来删除文件

$item = Item::query()->first();

$item->update([
    'image' => null
]);

要自动删除文件,请通过模型删除数据,而不是通过构建器,并且不要忘记加载您想要删除文件的必要关系

如果关系中有文件,并且不是通过模型删除关系,则文件不会被删除,并且会占用存储空间

$item = Item::query()->with(['phone', 'addresses'])->first();
/**
* All files in the model and in the loaded relations will be deleted
 */
$item->delete();

保存HasOneMorphOne关系

您可以像保存文件一样保存HasOneMorphOne关系。如果关系存在,则将更新,否则将创建

$item = Item::query()->first();

$item->update([
    'phone' => [ // hasOne, morphOne relation
        'number' => '1234567890'
    ]
]);

您还可以通过将其设置为null来删除关系

$item = Item::query()->first();

$item->update([
    'phone' => null // hasOne, morphOne relation
]);

保存HasManyMorphMany关系

您可以像保存文件一样保存HasManyMorphMany关系。如果关系存在,则将更新,否则将创建

$item = Item::query()->first();

$item->update([
    'phones' => [ // hasMany, morphMany relations
        [ // will be created
            'number' => '1234567890'
        ],
        [ // will be updated (id = 1)
            'id' => 1,
            'number' => '0987654321'
        ]
    ]
]);

sync模式保存HasManyMorphMany关系

您还可以同步HasManyMorphMany关系。未指定的关系将被删除

$item = Item::query()->first();

$item->update([
    'phones' => [ // hasMany, morphMany relations
        'mode' => 'sync', // not specified relations will be deleted
        'value' => [
            [ // will be created
                'number' => '1234567890'
            ],
            [ // will be updated (id = 1)
                'id' => 1,
                'number' => '0987654321'
            ]
        ]
    ]
]);

常见问题解答

查看已关闭的问题以获取常见问题的答案

许可证

MIT

其他包

查看我在GitHub个人资料上的其他包