ratiborro/laravel-relations

通过数据库列生成现有模型文件中的模型关系

v1.0.5 2021-05-02 12:41 UTC

This package is auto-updated.

Last update: 2024-09-29 05:56:30 UTC


README

一个包,用于通过数据库列和(如果存在)外键,以最简单的方式创建模型关系方法。

可以自动生成基于现有列和外键(如果存在)的模型关系,可以自定义每个生成关系的模板。

注意!生成发生在已存在的模型类中,不会创建新文件和类。现有的代码不会被修改。因此,可以随意使用模型而不用担心丢失或重写你的更改。

安装

安装包

composer require ratiborro/laravel-relations --dev

用法

使用一条简单的命令为模型创建关系

php artisan make:relations ModelName

该命令会找到模型文件(在配置的模型基本目录内),为数据库中的所有未来关系列生成名称(以及外键,如果有的话),填充模板逻辑,然后将其导入模型(如果存在现有关系则直接在后面导入,否则在类末尾导入)。

你可以随意更改创建的关系方法,因为包不会修改已创建的方法。

配置

发布配置

php artisan vendor:publish --tag=laravel-relations-config

发布模板(stubs)各种Laravel对象

php artisan stub:publish

发布创建的关系方法的模板(以便进一步编辑)

php artisan vendor:publish --tag=laravel-relations-stubs

示例

例如,有User、Post(具有user_id列)、Tag和PostTag模型。

要为Post模型生成关系方法,请在控制台输入以下命令

php artisan make:relations Post

该命令会生成具有所有必要参数的user(belongsTo)、tags(belongsToMany)和postTags(hasMany)关系。

如果你的列名符合命名规范,则默认情况下将省略关系参数。但是,你可以在配置中指定是否必须指定这些参数。

如果这些关系中的任何一个之前已经生成,则不会重新写入。即使这些方法的代码已经被修改(除了名称)。只会添加缺失的关系。

因此,连续多次调用同一模型的生成关系调用只会添加一次缺失的代码。例如,在模型中添加指向其他实体的新列时,你可以再次安全地调用关系生成命令,它会生成所需的关系方法,而不会影响其他方法。

故障排除

  1. 错误 模型不存在:请确保模型的 命名空间 与配置中指定的一致。

    例如,如果配置中指定了 命名空间 App\Models,则可以通过名称调用模型: php artisan make:relations User,如果模型直接位于App/Models中,或者通过 php artisan make:relations SubdirectoryName/User 调用,如果模型位于子目录中且具有不同的 命名空间(示例中的App/Models/Subdirectory)。

    如果所有模型都位于另一个目录中(不是App/Models),只需更改配置 models.base_namespace

联系

作者: Ratibor Korobin