careset / durc
DURC 是反向 CRUD
Requires
- php: ^8.1
- erusev/parsedown: ^1.7
- zordius/lightncandy: dev-master
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2024-09-30 01:18:05 UTC
README
DURC 是反向 CRUD
DURC 是一个 artisan 控制台命令,它通过读取数据库并假设数据库遵循某些规则来构建 Laravel Eloquent 模型和视图。
DURC:mine 将使用以下列出的结构规则挖掘您的数据库,并生成一个配置文件。DURC:write 将使用配置文件为 Laravel 系统生成基本的 CRUD 组件。
安装
通过 Composer
$ composer require careset/durc:dev-master
我们将最终发布一个稳定、非 alpha 版本。但就目前而言,您必须接受 alpha 代码。
本项目仅适用于 Laravel 5.5
应该可以工作 package auto-discovery。
发布 DURC 和 laravel-handlebars 的配置
php artisan vendor:publish --provider="CareSet\DURC\DURCServiceProvider"
php artisan vendor:publish --tag=laravel-handlebars
将内容添加到您的配置文件中
在您的项目/config/app.php 中将以下行添加到服务提供者下
ProAI\Handlebars\HandlebarsServiceProvider::class,
CareSet\DURC\DURCServiceProvider::class,
DURC mustache 模板使用 .mustache 扩展名。现在将 '.mustache' 添加到您的项目/config/handlebars.php 中的 'filext' 参数数组中。这将确保您可以看到生成的视图。
添加数据库参数
如果您正在使用 .env 文件,请使用具有至少读取访问权限的所有挖掘表的用户的 mysql 数据库参数填写。如果您的项目根目录中没有 .env 文件,则需要将 .env.example 复制到一个新的 .env 文件中。
发布 DURC 公共资产
由于 composer 不运行包脚本,您需要手动发布 DURC 的公共资产,或将此脚本添加到您的根级 composer.json 文件中。
php artisan vendor:publish --tag=public
可用命令
命令
$ php artisan DURC:mine --DB=thefirst_db_name --DB=the_second_db --DB=the_third (etc...) $ php artisan DURC:write
如果您想运行全新安装并演示 DURC 内容,请从 /test_mywind_database/ 加载 mysql 表,然后运行
$ php artisan DURC:mine --DB=DURC_northwind_model --DB=DURC_northwind_data --DB=DURC_aaaDurctest --DB=DURC_irs $ php artisan DURC:write
有一个演示网页界面,您可以通过将您的项目/routes/durc.php 的内容复制到您的项目/routes/web.php 来查看。
DURC:mine 将在 /config 目录中生成两个文件
yourproject/config/DURC_config.autogen.json yourproject/config/DURC_config.edit_me.json
如果您更改 DURC_config.edit_me.json,则它将不会在后续的 DURC:mine 运行中被覆盖。
DURC:write 将从 DURC_config.edit_me.json 中生成以下 Laravel 资产
- yourproject/app/DURC/Controllers/DURC_*Controller.php 下的 DURC 控制器(这些将由后续的 DURC:write 运行覆盖)
- 继承自相应 DURC 控制器的 Laravel 控制器(位于 yourproject/app/Http/Controllers/*Controller.php 下)(这些不会被后续的 DURC 运行覆盖,这是您代码放置的地方)
- yourproject/app/DURC/Models/DURC_*.php 下的 DURC 模型
- 继承自相应 DURC 模型的 Laravel Eloquent 模型(位于 yourproject/app/*.php 下)
- yourproject/resources/views/DURC/ 下的 Mustache 模板
- 每个表的索引模板
- 每个表的编辑模板
- 一个起始菜单模板,列出了所有生成的表,并演示了如何使用 mustache 等包含 durc 表单
- 将路由添加到名为 yourproject/routes/web.durc.php 的路由文件中,并自动由 DURCServiceProvider 加载
- 将测试路由添加到名为 yourproject/routes/durc_test.php 的文件中,并自动由 DURCServiceProvider 加载
我们为此使用了 webpack 依赖项,但您的 JS 系统可能不同。
https://datatables.net.cn/examples/styling/bootstrap4.html
工作原理
"并行生成"意味着初始的 durc 生成命令将构建一个 something.autogen.ext 和一个 something.editme.ext,如果(并且仅当)something.editme.ext 被以某种方式编辑或更改,则它将不会被覆盖。自动生成版本将始终被覆盖。
"继承"生成器表示DURC会生成一个基类,用户可以扩展这个类。DURC总是会覆盖父类,但永远不会覆盖修改过的子类。
在命令行上使用“squash”选项将告诉DURC覆盖一切,包括本来会包含用户更改的类。请谨慎使用此选项。
表格语法规则
为了自动生成Laravel Eloquent类,您必须遵循一些数据库设置的规则。虽然这些规则中的大多数在DURC的当前版本中没有影响,但它们都是我们打算支持的数据库语法。
- 假设您想在数据库中有一个DURC会忽略的表...只需在表名前加上下划线。因此,DURC将不会关注名为的表。
- 不要在您的表中使用复数名称。DURC只使用单数,不会在单数和复数之间进行转换。这太复杂了,而且没有足够的益处。
- 不要在您的表中使用驼峰命名法。表必须是 this_good_data 而不是 thisGoodData。这将在未来得到修复,但目前这是一个限制。
- 您必须在每个表的'id'字段上设置AutoIncrement和PRIMARY键。这是DURC将用于关联内容的方式。
- 如果您想将一个字段链接到另一个表的id,确保该字段名以 YourThing_id 结尾。
- 您可以有多个链接键,因此 Another_YourThing_id 和 AFine_YourThing_id 都会按预期工作。
- 多对多关系基本上被忽略,相反,DURC会将两个多对一关系解析到中央表中。如果需要,您可以在客户端代码中覆盖此行为。
- DURC的一个主要功能是能够使用自动完成功能通过界面将字段相互链接。这种自动行为需要了解表中的哪个字段将在自动完成中用于将其他数据类型链接到。选择元素的标签是根据首选具有 'name' 或 'label' 等的第一个字段自动生成的。之后,DURC将选择它找到的第一个文本字段。
- 然而,如果有名为 select_name 的字段,系统会将其视为正确答案,并使用该字段作为选择名称,无论是否有其他 _name 或 _label 字段。
- 如果字段以 is_ 开头,则被视为布尔值,并将用复选框或单选按钮替换...
- 如果有一个名为 [entity]_id 的字段是主键的表,DURC将解析为与 [entity] 表的 has-one 关系。
- DURC原生支持markdown字段。如果您给字段命名为以 _markdown 结尾,它将在DURC屏幕上自动显示markdown编辑器。
- 将字段命名为 something_code 将将DURC HTML屏幕转换为代码编辑器,并使用 CodeMirror 创建代码编辑器。所以将文本或 varchar 列类型以 _sql_code 结尾将用于将字段转换为使用sql模式的代码编辑器。
- _code后缀字符串通常是CodeMirror模式名称,但有一些变化已在 CodeSyntaxPostFix.md 中记录。
Laravel Eloquent期望的
ALTER TABLE `YourThing`
ADD `created_at` DATETIME NOT NULL,
ADD `updated_at` DATETIME NOT NULL,
ADD `deleted_at` DATETIME DEFAULT NULL
'deleted_at'字段必须有存在为null的能力,如果您有它,DURC应该为表启用Eloquent软删除方法。 https://laravel.net.cn/docs/5.5/eloquent#soft-deleting
由于我们从表中的字段名构建函数名,我们必须有一些限制。你可以以数字'1'或'0'开始字段,但不能以此方式开始函数。所以要注意...
自动生成的API
一旦DURC生成了其类,它也将为每个表自动生成一个API端点。
访问/DURC/json/yourtablenamehere/1
将显示具有id为1的yourtablename条目。DURC知道如何获取与yourtablename相关的数据,并将显示与yourtablename id = 1相关联的其他表中所有理解的数据。
使用Eloquent子类进行引导
DURC的基本思想是生成一些从自动生成的父类继承的子类。当您实质性更改数据库结构时,您将重新运行生成器,但生成器将不会触及您在/app/目录下放入的任何子类代码。
因此,如果您已更改/app/yourthing.php,则它不会被覆盖...但如果底层yourthing表现在有一个新字段链接到另一个表,那么所有这些都应该按预期工作,因为父类(每次生成代码时都会被覆盖)现在更智能。
这有点像蛇吞自己的尾巴,但您放入子-DURC类文件中的内容可以改变下一轮代码生成的方式。具体来说,如果您填充以下UX字段
- public static $UX_hidden_col
- public static $UX_view_only_col
它们的作用正如其名。下一次生成视图时,它将不会显示隐藏的字段,而只有视图只读字段将被禁用或只读。
故障排除
如果您收到错误“未指定应用程序加密密钥”,则必须将默认的.env.example复制到.env中并运行
$ php artisan key:generate