codegaf/crudgenerator

Laravel级别的后端完整CRUD创建命令。

v2.0.0 2021-05-18 06:11 UTC

This package is auto-updated.

Last update: 2024-09-20 12:51:55 UTC


README

Latest Version on Packagist Total Downloads

为10codesoftware生成后端CRUD。

安装

您可以通过Composer安装此包

composer require codegaf/crudgenerator

使用指南

后端部分的crud generator命令会生成以下类

  • 迁移。
  • 模型。
  • 控制器。
  • 服务。
  • 仓库。
  • 数据表。
  • 请求。
  • 工厂。

迁移类将直接存入database/migrations目录。模型类将存入app/models目录。其他类将按照约定存入相应的目录。例如:users的crud generator控制器将存入UserController/UserController.php。

crud generator需要一些预先数据才能正常工作。这些数据将在位于config/models目录的config模板中指定。文件名将遵循单数驼峰命名约定。例如:user, userContact, car… 假设用户有联系人,关系为1:N,一个用户可以有多个联系人,每个联系人都属于一个用户。

重要:如同Laravel中的任何config文件,每次修改与crud generator相关的config文件后,都需要调用命令

php artisan config:cache

如果执行crud generator且未调用Laravel重建缓存命令,则更改不会产生预期效果。

迁移索引。

1.列

columns数组的索引包含数据库中列的名称。每个列将考虑以下选项

  • type -> String. 必须的。数据库中列的类型。与迁移中指定的类型相同,即接受Laravel接受的所有类型。$table->string, $table->text, $table->integer…

  • nullable -> Booleano. 可选的。如果指定此选项并将其设置为true,则数据库中的列将是可空的。如果没有指定此选项或将其设置为false,则列将不可空。

  • unique -> Booleano. 可选的。如果指定此选项并将其设置为true,则数据库中的列将是唯一的。如果没有指定此选项或将其设置为false,则列将不会是唯一的。

  • default -> String|Integer|Boolean… 可选的。如果指定此选项并设置一个值,则将在数据库列中添加一个默认值。

2.外键

foreigns数组的索引收集外键类型的列。此索引不是必须添加的。只有对于具有关系的表,才需要添加。每个外键数组的选项将是

  • references -> String. 必须的。是外键与另一表中列的关系。

  • table -> String. 必须的。是与外键相关联的表名。

  • onDelete -> String. 必须的。如果删除行,将执行的关系操作。此索引是必须指定的,但如果不需要任何操作,可以留空。

'migration' => [
   'columns' => [
       'name' => [
           'type' => 'string',
           'nullable' => false,
           'default' => 'string|integer|boolean...'
       ],

       'surname' => [
           'type' => 'string',
           'nullable' => false,
           'unique' => false,
       ],

       'email' => [
           'type' => 'string',
       ],

       

'phone' => [
           'type' => 'string',
           'nullable' => true,
       ],

       'born_date' => [
           'type' => 'date',
       ],

       
       'user_id' => [
           'type' => 'unsignedBigInteger',
       ]
       
   ],

   
   'foreigns' => [
       'user_id' => [
           'references' => 'id',
           'table' => 'users',
           'onDelete' => 'cascade'
       ]
   ]
],

3.模型

model索引将允许我们指定如下fillable和关系

  • fillable -> String. 必须的。在此索引中,我们将指定要存储在数据库中的列。例如
‘model’ => [
    ‘fillable’ => ['name', 'surname', 'email', 'phone', 'born_date', 'user_id'],
],
  • 关系 -> 数组。可选。在这个索引中,我们可以指定与其他实体的关系。relations数组中的索引将是Laravel考虑的关系名称。例如:belongsTo、hasMany、hasOne、belongsToMany...

此数组可以有以下选项

  • functionName -> String。必需。是函数名称。例如:public function users…

  • modelClass -> String。必需。是关系的目标类。例如:User::class。

  • foreign -> String。必需。是外键列。例如:user_id

‘model’ => [
    ‘fillable’ => ['name', 'surname', 'email', 'phone', 'born_date', 'user_id'],
    ‘relations’ => [
	    0 => [
                ‘relation’ => ‘belongsTo’,
                ‘functionName’ => ‘user’,
                ‘modelClass’ => ‘User::class’,
                ‘foreign’ => ‘user_id’
        ],
        1 => ...
    ],
],

对于belongsToMany关系,我们有以下选项可用

  • table -> String。必需。是中间表名称。

  • foreignKey -> String。必需。是外键名称。

  • relationKey -> String。必需。是模型键名称。

  • pivot -> String。可选。如果中间表有pivot列,可以在这里设置。

‘model’ => [
    ‘fillable’ => ['name', 'surname', 'email', 'phone', 'born_date', 'user_id'],
    ‘relations’ => [
	    0 => [
                ‘relation’ => ‘belongsToMany’,
                ‘functionName’ => ‘user’,
                ‘modelClass’ => ‘User::class’,
                ’table’ => ’users_contacts’,
                ‘foreignKey’ => ‘user_id’,
                ‘relationKey’ => ‘friend_id’,
                ‘pivot’ => ‘friendship_date, active’
        ],
        1 => ...
    ],
],

对于多态关系,我们有以下结构可用

  • morphTo
‘model’ => [
    ‘fillable’ => ['name', 'surname', 'email', 'phone', 'born_date', 'user_id'],
    ‘relations’ => [
	    0 => [
                ‘relation’ => ‘morphTo’,
                ‘functionName’ => ‘imageable’,
        ],
        1 => ...
    ],
],
  • morphOne, morphMany, morphToMany, morphedByMany
‘model’ => [
    ‘fillable’ => ['name', 'surname', 'email', 'phone', 'born_date', 'user_id'],
    ‘relations’ => [
	    0 => [
                ‘relation’ => ‘morphOne’, // morphMany, morphToMany, morphedByMany
                ‘functionName’ => ‘image’,
                ‘modelClass’ => ‘User::class’,
                ’name’ => ’imageable’,
        ],
        1 => ...
    ],
],

13.DataTables

模板相对于我们迄今为止使用的datatables方法有一个新特性。这次实例化和准备都在后端进行。为了让crud generator执行此任务,我们必须将以下结构添加到config中。

dataTables数组的索引是数据库中的列名称或我们在查询中给出的字段别名。这些数组本身还有一个索引,允许指定列标签。不需要指定动作列。crud generator已经自动考虑了它。如果不需要,可以在生成类DataTable后删除它。

  • label -> String。必需。以lang格式传递列名,以供视图显示。
'dataTables' => [
   'name' => [
       'label' => 'global.name'
   ],
   'surname' => [
       'label' => 'global.surname'
   ],
   'email' => [
       'label' => 'global.label'
   ],
   'phone' => [
       'label' => 'global.phone'
   ],
   'born_date' => [
       'label' => 'global.born_date'
   
   ],
   'created_at' => [
       'label' => 'global.created_at'
   ]
],

配置正确文件后,在config/models中可以执行以下指示的命令。

为了使config文件中的更改生效,我们需要清理Laravel的config缓存。

php artisan config:cache

要执行完整命令,请添加--all选项。模型名称必须使用PascalCase(Car, UserContact)指定。

php artisan crud:generator Model --all

如果不需要执行所有文件,请忽略--all选项。终端将询问我们想要生成哪些文件。

php artisan crud:generator Model

destroy crud命令

如果你在crud的早期阶段犯了错误,可以使用一个命令来删除整个crud(除了database文件夹中的migrations)。迁移文件没有被删除的原因是它包含了一个动态部分,它引用了创建时的timestamp。

命令执行方式如下

php artisan destroy:crud Model
  • model -> 必需。model引用了crud的模型,格式为大写、单数和驼峰式。

系统会在执行过程之前要求确认。请记住,这个动作会删除整个crud,因此需要权衡,如果crud已经进展,是否值得执行该命令。由于迁移文件包含动态部分,destroy:crud命令无法删除它。必须手动删除。

更新日志

请参阅更新日志以获取有关最近更改的更多信息。

安全性

如果你发现任何与安全相关的问题,请通过isaaccamrod@gmail.com发送电子邮件,而不是使用问题跟踪器。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。

Laravel Package Boilerplate

此包是使用Laravel Package Boilerplate生成的。