ratiborro / laravel-relations
通过数据库列生成现有模型文件中的模型关系
Requires
- php: >=7.1
- doctrine/dbal: ^2.1|^3.0
- illuminate/console: ^5.5|^6|^7|^8
- illuminate/support: ^5.5|^6|^7|^8
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)关系。
如果你的列名符合命名规范,则默认情况下将省略关系参数。但是,你可以在配置中指定是否必须指定这些参数。
如果这些关系中的任何一个之前已经生成,则不会重新写入。即使这些方法的代码已经被修改(除了名称)。只会添加缺失的关系。
因此,连续多次调用同一模型的生成关系调用只会添加一次缺失的代码。例如,在模型中添加指向其他实体的新列时,你可以再次安全地调用关系生成命令,它会生成所需的关系方法,而不会影响其他方法。
故障排除
错误
模型不存在:请确保模型的 命名空间 与配置中指定的一致。例如,如果配置中指定了 命名空间
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