Laravel 从现有数据库表中生成 Model 模型文件
46

当我们接到老板的需求,或者我们自己头脑发热想把现有的系统使用 laravel 重构一遍,而为了过渡或者兼容现有系统不能动数据库的时候,我们一定恨不得有个工具可以直接帮我们将现有的数据库表直接生成 laravel 的模型文件;而恰好,有几位英雄已经帮我们开发了这个工具,下面介绍一款,能够将数据库表直接生成 laravel 模型文件的利器,那就是:laravel-model-generator,github地址:https://github.com/ignasbernotas/laravel-model-generator

安装使用非常简单,就三步:

第一步,命令行进入项目的根目录,输入命令:

composer require ignasbernotas/laravel-model-generator

第二步,在 app/Providers/AppServiceProvider.php 文件的 register 方法里面,加入如下代码:

public function register()
{
    if ($this->app->environment() == 'local') {
        $this->app->register('Iber\Generator\ModelGeneratorProvider');
    }
}

第三步,输入命令:

php artisan make:models

大功告成,看看 app/Models 文件夹下面是不是多了很多模型文件

本帖已被设为精华帖!
本帖由 Summer 于 2年前 加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 19
Summer

好东西

2年前
JobsLong

已 Star

2年前

可以生成migration吗?

2年前

@ricoo 可以生成 migration ,请参考这篇文章:https://laravel-china.org/topics/351

2年前

@远客 赞!

2年前

还可以这样 真不错!

2年前

不错!还差一个由Model生成crud的generator :smile:

2年前
TimJuly

我们公司也做过系统升级,升级的时候自己写了一套生成 Model,Service 的玩意儿,直不过没开源,哈哈.

试用了一下,还不错,提几个建议哈,别打我.

1.建议读取数据库配置中的表前缀,然后生成 Model 名的时候把前缀去掉一下.否则生成的名字太长了.

2.建议增加数据库的选择.我们一套程序里有时候会操作多个数据库,基本上都需要生成.

2年前

@TimJuly 哈哈,是的,提议不错;

另外我还发现了个问题,这个工具生成的模型文件的文件名默认为表名英文单词的单数形式,比如表名后面有个字母 s ,那文件名多半是没有 s 的了,这个可能是老外们的习惯,但是会给我们造成一定的麻烦。我们的直观感觉就是有一些模型文件的文件名和类名是一样的,而有一些模型文件的文件名和类名又不一样,在写代码的时候会感觉困惑;所以我们最好的方式是把模型文件的文件名改为和类名一致;

改动也很简单,找到 vendor\ignasbernotas\laravel-model-generator\src\Commands\MakeModelsCommand.php 这个文件的 generateTable 方法,将其中一行代码:

$name = Pluralizer::singular($this->parseName($prefix . $class));

改为:

$name = $this->parseName($prefix . $class);

即可

2年前

@TimJuly 你提的建议的第二点,选择数据库生成模型文件的,我实现了,已经申请代码合并,看原作者什么时候有时间合并代码,或者可以在我的 github 上面看到:https://github.com/tarrin/laravel-model-generator ,第一点,去掉前缀的就没搞了,这个应该没什么太大关系

2年前

这扩展包挺赞

2年前
Destiny

:punch: 超赞

2年前

我把代码git下来的,然后第三运行php artisan make:models;时报错,谁来帮我,小白一个啊
PHP Fatal error: Class 'Iber\Generator\ModelGeneratorProvider' not found in /mnt/hgfs/www/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php on line 575

1年前

@scenery 用 git 搞下来的代码直接用不行的,你得用 composer ,因为你直接 git ,是没有被设置好自动加载的,composer 会帮你把自动加载这些全部弄好

1年前

这玩意和YII2 里面的 gii 真不能比. 感觉还在原始时代.
gii 生成, 不管是自定义model, 多库, 表前缀, 关联model ,全部轻松在web里点击几下就ok了.
而且看得见,还有预览,还有覆盖对比操作.

1年前

求助。我用laravel5.1 时按步骤下来没问题的,最近换成5.5.同样是php artisan make:models,他报错the name argument does not exist。郁闷哪里出了问题,怎么感觉这个命令没走啊

8个月前

@scenery 你的问题解决了吗?? 我现在也是这个问题!!!!

5个月前

@Reset903 我换了一个三方reliese/laravel

4个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!