Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
614 views
in Technique[技术] by (71.8m points)

laravel是否有从数据库生成模型的工具?如果没有,为啥没有人实现呢?

如题

java、.net平台下都有对应的反向工程功能。为啥laravel没有呢,感觉laravel社区挺大的啊。

更新

看到回答中有说使用 laravel migration进行code first的。刚看了下文档,感觉migration和code first没有多大关系,而且好像没有解决我的需求。migration本质是一个数据库版本管理工具,用于团队间数据库结构共享。其实我想表达的需求是:

需求一

由于php是弱类型语言,我个人是从java、.net转到php的,无法适应php中大面积使用字符串索引的开发方式。这种方式有以下问题,我想避免这些问题。

  • 影响开发效率;
  • 容易出错,字符串一个字母写错就会导致不可预知的问题;
  • 难以重构。

比如我创建一个model类 User 要访问这个类的一个字段,需要这样写:

    $user['name']

而我想在有代码补全的前提下这样写:

    $user->name;

当前的解决方案是使用ide-helper生成PHPDoc,暂时可以解决此问题。

需求二

数据库中已经建立好的外键关联,需要手工写代码建立model中的关联,比如hasOne和hasMany之类,这些代码和数据库结构是严格对应的,完全没有必要手写,我的疑问和需求是为啥没有工具实现自动生成关联呢。.net下的ef做法是将数据库结构反向工程为一个描述文件以及相关model类,通过类即可方便实现数据库操作,java平台下也有相关方案。

我认为任何orm框架都应该用这种思路吧。即:model类代码和数据库结构一一对应,提供高效的访问数据库接口。到了laravel这边感觉像是一个只完成了一半的工程。本来是非常重要和核心的内容反而需要使用ide-helper这种相对较弱的辅助来实现。这一点可非常不艺术.....


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

第一个问题,我曾经选择过使用 php artisan ide-helper:models 来在模型上创建注释进行开发,这样开发可以带来:模型对象字段提示,scope 提示,关联关系类型提示,非常有帮助,而且因为其输出的注释中会带上参数类型,对于需要类型判断的地方也非常适用,后来也发现一些小问题(原自 ORM 本身),就是数据库某个字段名需要修改,或者删除时,如果系统大了,就会找不到哪儿引用了这个字段,以至于不敢动,后来就想了个主意,查询出数据库的结构,然后创建一个常量类用来保存字段,例如 ArticleTable 里面包含常量,由数据库中的字段组成,这样,在使用字段时就可以使用常量来表示,以后修改就方便一些了,就是写起来变得麻烦了。因为太长时间没写过了,不太记得这个情况下 ide-helper 生成的字段注解是否还能有效调用,不过这也算是一个解决方法。

第二个问题,现在很对非官方的数据库设计规范,大多都建议 不要使用数据库外键作为约束,所有外键需求都应在业务层面解决,虽然外键带来了一些好处,甚至弊大于利,故此都不太推荐使用数据库外键进行约束。

就 ORM 的实现完成度来说,应该没多少能比得上 Laravel 了吧,如果这都算半成品的话,其他的可能半成品都算不上 ? 可能有失偏颇,使用迁移文件也是很不错的选择。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...