bakgul / laravel-code-generator
该包旨在生成目标文件上的代码以提高生产力。在这个第一个版本中,关系覆盖了几乎全部。
Requires
- php: ^8.1
- bakgul/command-evaluator: ^4.0
- bakgul/file-content: ^4.0
- bakgul/file-history: ^4.0
- bakgul/kernel: ^4.0
- bakgul/laravel-file-creator: ^4.0
- bakgul/laravel-helpers: ^1.0
README
该包旨在生成目标文件上的代码以提高生产力。在这个第一个版本中,关系覆盖了几乎全部。
免责声明
该包应该已经准备好投入生产,但尚未经过充分测试。您应该谨慎使用,因为此包将操作您的文件和文件夹。始终使用版本控制,并确保您有 文件历史记录 以便能够回滚更改。
v3 更新指南
- 转到
vendor/bakgul/kernel/config/apps.php
文件并查看更改。在每个应用下都有一个名为routes
的新键。将这个新结构带到您配置文件夹中的 packagify.php 文件。 - 将
'bundler' => 'vite' or 'mix'
添加到您配置文件夹中的 packagify.php 文件“主从内核”部分下的主数组。
安装
如果您已安装 Packagified Laravel,则应该已经拥有此包。所以跳过安装。
sail composer require bakgul/laravel-code-generator
注意:另一个名为 Laravel 文件创建器 的包不会通过此包安装。但此包创建交叉模型时需要它。如果您使用交叉模型,请之后安装 Laravel 文件创建器。
Eloquent 关系
此包可用于将 Eloquent 关系添加到模型和迁移中。实现的关联有:
- 一对一
- 一对一多态
- 通过一个拥有一个
- 一对多
- 一对多多态
- 通过一个拥有多个
- 多对多
- 多对多多态
在未来版本中,还将涵盖 一对多。
签名
create:relation {relation} {from} {to} {mediator?} {--m|model} {--p|polymorphic}
参数
-
relation:Eloquent 关系类型之一的缩写
- oto:一对一
- otm:一对多
- mtm:多对多
-
from:这是关系的“拥有”部分。参数的格式为 package/table:column:model。
-
package:它是可选的,在创建“独立 Laravel”或“独立包”时将被忽略。
- exists:在指定的包中搜索模型。
- missing:检查所有可能的模型容器以查找模型。
-
table:它是必需的,应该是迁移文件名中“create_”和“_table”之间的部分。
-
column:它是可选的。
- exists:本地键将是给定的列。如果它不存在,它将作为一个整数添加。当关系是一对多或多对多时,这将在关系的反向部分创建外键。例如,如果 table 是 users 且 column 是 email,则外键将是 user_email,除非关系的反向部分有列。当关系是多对多时,这将在交叉表中使用。
- missing:它将是“id”,并将应用 Laravel 命名约定。
-
model:它是可选的。
- exists:当模型名无法从表名生成时,您应该指定它。
- missing:模型名称将从表名生成。
-
-
to:这是关系的“属于”部分。参数的格式为 package/table:column:model。
-
package:它是可选的,在创建“独立 Laravel”或“独立包”时将被忽略。
- exists:在指定的包中搜索模型。
- missing:检查所有可能的模型容器以查找模型。
-
table:它是必需的,应该是迁移文件名中“create_”和“_table”之间的部分。
-
column:它是可选的。
- 存在:如果它以 "_id" 结尾,它将被直接使用。否则,它将被追加到 "has" 部分的表名单数形式以生成外键。如果 来源表 是 vip_users,并且 列 是 email,则外键将是 vip_user_email。但如果 列 是 user_id,则外键将是 user_id。当关系是多对多时,这将用作连接表的键。
- 缺失:它将是 "id",并且将应用 Laravel 命名规范。
-
-
调解者(作为桥梁):这是 "Has One Through" 和 "Has Many Through" 关系的中间人。因此,当关系是 oto 或 otm 时,名为 "mediator" 的参数成为中间人。参数的模式是 包/表:列:模型。
-
package:它是可选的,在创建“独立 Laravel”或“独立包”时将被忽略。
- exists:在指定的包中搜索模型。
- 缺失:检查所有可能的模式容器以找到模式。如果找不到,它将在与 from 相同的命名空间中创建。
-
table:它是必需的,应该是迁移文件名中“create_”和“_table”之间的部分。
-
列:这也是可选的,但它的内部模式与其他参数的列不同。这里预期的是两个通过点粘合的列名 (col_1.col_2)。第一个列是连接到 has 一侧的外键,而第二个列是与 belongsTo 一侧相关的本地键。也就是说,您可以指定仅一个列名。在这种情况下,另一个将是 "id"。 "email" 等于 "email.id",".email" 等于 "id.email",没有列意味着 "id.id"。最后,如果第二个键以 "_id" 结尾,它将不带有表名前缀使用。
-
模型:这是可选的。只有在您希望迁移和模型名称无关时才能指定。
-
-
调解者(作为枢纽):当关系是 "多对多" 时,调解者变为枢纽。它是可选的。如果它不存在,则遵循 Laravel 规范。换句话说,如果 from 是 comments,而 to 是 posts,则迁移将是 comment_post。参数的模式是 包/表:模型。
-
包:这是可选的。
- 存在:在指定的包中搜索模型。如果找不到,它将创建在那里。
- 缺失:检查所有可能的模式容器以找到模式。如果找不到,它将在与 From 相同的命名空间中创建。
-
表:如果传递了调解者块,则需要表名。
-
模型:如果您想为枢纽表创建模型,可以在这里指定模型名称。如果模型名称可以从表名生成,如 post_user 和 PostUser,则只需将 -m 添加到命令中,而不是指定模型名称。
-
选项
-
模型:在生成多对多关系时,如果命令中添加了 " -m " 或 " --model ",则将为枢纽表创建模型。
-
多态:如果命令有 " -p " 或 " --polymorphic ",则将关系转换为指定关系类型的多态。
打包的 Laravel
包括此包在内的主要包可以在此处找到: Packagified Laravel