kolirt / laravel-master-model
简化Laravel中模型操作、保存关系和上传文件的包
4.0.1
2024-09-11 09:39 UTC
Requires
- php: >=8.1
- laravel/framework: >=10.0
README
Laravel Master Model是一个用于Laravel框架的强大包,简化了模型操作,尤其是在保存关系和上传文件方面。
此包旨在为希望优化数据库和文件操作过程的开发者设计,以降低代码复杂性和提高性能。
结构
入门
要求
- 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();
保存HasOne
、MorphOne
关系
您可以像保存文件一样保存HasOne
、MorphOne
关系。如果关系存在,则将更新,否则将创建
$item = Item::query()->first(); $item->update([ 'phone' => [ // hasOne, morphOne relation 'number' => '1234567890' ] ]);
您还可以通过将其设置为null
来删除关系
$item = Item::query()->first(); $item->update([ 'phone' => null // hasOne, morphOne relation ]);
保存HasMany
、MorphMany
关系
您可以像保存文件一样保存HasMany
、MorphMany
关系。如果关系存在,则将更新,否则将创建
$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
模式保存HasMany
、MorphMany
关系
您还可以同步HasMany
、MorphMany
关系。未指定的关系将被删除
$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' ] ] ] ]);
常见问题解答
查看已关闭的问题以获取常见问题的答案
许可证
其他包
查看我在GitHub个人资料上的其他包