我已经做了12年的PHP程序员,并多次重新发明轮子,为我们的闭源代码web应用程序构建了自己的框架,该应用程序作为托管解决方案提供,为所有客户使用相同的共享数据库。
现在我正在试用Laravel 5,注意到几乎每个示例都使用Eloquent和数据库迁移。对我来说,这类事情似乎是针对简单的数据库和不喜欢SQL或数据库设计的人(但我可能错了)。
我们的MySQL数据库包含100多个表、许多存储过程和许多触发器,我无法想象在ORM中会这样做。我们使用Navicat进行数据库设计和SQL查询测试。为了将数据库升级到应用程序的新版本,我们已经编写了一些不错的脚本,甚至可视化工具。
因此,基本上我的问题是,Laravel是否真的打算与Eloquent和迁移一起使用,或者如果没有它们,我真的会错过很多功能。
你推荐什么?
,由您决定
Laravel迁移的目的是保持数据库的版本(同时使用版本控制器)。雄辩的目的是在复杂的情况下,如多个Join,表之间的简单关系映射。由于性能问题,不建议使用它。然后你可以选择Query Builder,它提供了更好的性能。你需要使用'DB::statement();
在Laravel中编写普通查询
Laravel是Angular Js的完美匹配,更重要的是,Laravel只是几个漂亮的PHP组件的包装器,能够提供快速的结果。
希望能有所帮助。。
使用ORM可以简化您的生活,因为大多数常见的场景都已涵盖。获取数据、管理关系和急切/懒散的加载都是轻而易举的事。它还可以保护您免受在编写自己的硬编码查询时可能创建的任何注入漏洞的影响。当然,并不是所有的场景都可以由ORM处理,因此可以编写RAW查询。使用Laravel的Query Builder
,你可以做这样的事情:
$results = DB::select( DB::raw("SELECT * FROM users WHERE username = :username"), ['username' => 'johndoe']);
如果你想执行像ALTER
或SET
这样的东西,那么你可以使用DB::Statement
。
需要注意的是,Eloquent
是Laravel的ORM,而Query Builder
是以安全的方式构建查询的层。
因此,是否使用Eloquent取决于您,我相信他们在使用坚实的ORM方面做得很好,但您总是可以自由地实现另一个ORM,如Doctrine、Data Mapper等。其中大多数都有Laravel绑定。
编辑:值得一提的是,Eloquent模型提供了一些方便的额外功能,也简化了事情,比如JSON转换__toString、受保护的属性、日期转换等。当获取多个模型时,它们将存储在Collection
中,Arrayable
提供了更多的方法来创造快乐时光。看看:http://laravel.com/docs/5.1/eloquent-collections
如果需要,可以在Laravel中运行简单的SQL查询,但实际上大多数示例都使用Eloquent
。
我一直在做一个有100多个表的项目,在大多数情况下,可以使用Eloquent,而不是每次都放原始SQL查询,但这是我的偏好。
不过,您提到数据库中有许多存储过程和触发器。老实说,您应该重新考虑这一点,因为现在您可能在数据库中投入了太多的业务逻辑,而您的逻辑既在数据库中,也在应用程序中。
几个月前,我在MsSQL中看到了这样的数据库,这太可怕了-没有人真正知道发生了什么,当你想将这个数据库迁移到MySQL和Laravel应用程序时,这是一个很大的问题,因为数据库中有太多的逻辑(我没有参加这个项目,只看了一眼)