php - 如果我的应用程序的许多 Laravel 4 查询需要是 DB::raw,那么使用 Eloquent 有什么优势?

标签 php mysql orm laravel laravel-4

我不是 ORM 的粉丝。伟大的 SO 贡献者 Bil​​l Karwin 的想法很好地代表了我的感受。参见 here here (并阅读他的 specific responses on Glenn Block's list of advantages of an ORM )。

我认为仅在存储库模式或/和 DAL 中使用良好的可靠 SQL 是创建应用程序的最佳方法,该应用程序将不仅仅是我在一个又一个教程中看到的小示例(使用简单的数据库)。 (而且我永远不想看到另一个 Posts::model()->findAll(); 示例!)。似乎所有的精力都花在了如何做一个很酷的单行上,而不是一个接一个的真实场景。尝试复杂连接、自连接、大量别名、串联、嵌套或/与、结果或排序中的聚合函数、子查询、复合键、表前缀,您就会开始明白我的意思了。

但是我知道这些年来它们变得更好,而且我非常喜欢 Laravel 4,以至于我认为我最终需要再试一次。但是在评估了我的需求之后,我的许多查询似乎都需要运行 "raw"DB::select(DB::raw 因为 Eloquent 无法处理它们正确或表达它变得比直接使用 SQL 更复杂。

当许多查询必须“原始”运行时,使用 Eloquent/Query Builder 与纯粹使用 SQL 并在存储库或 DAL 中添加任何方法来覆盖所有数据访问相比有什么优势需要? 因为在我看来,Laravel 中的原始查询与纯 SQL 相同,而且在这些情况下我没有获得 ORM 提供的任何优势。对于那些 DB::raw 情况,我将被迫为我已经在 ORM 中使用的东西创建自己的方法,例如访问器、修改器、时间戳、软删除等。换出与 Eloquent 兼容的数据库引擎的优势也会丢失。

最佳答案

我刚刚开始使用 Laravel,但这是我的想法......

我认为 ORM 的优势在于用它代替执行原始 sql 查询。我的感觉是,如果您已经不得不编写原始 sql 查询,请搁置 ORM 并自己完成所有工作。很可能该模型足够复杂,以至于您无论如何都会长期遇到效率问题。

想到的第二个问题是使用 ORM 和原始查询之间的上下文切换。 Karwin 在他的博客文章中提到大多数人“不熟练”地使用 ORM。我的猜测是,如果您将它用于非常轻的数据访问/查询,您将不会对它有深入的了解,并且会属于这一类。 ORM 可能非常复杂,很难很好地了解如何正确使用它们。

注意:到目前为止,我还没有找到一个我喜欢的 ORM 来大规模实现,但我有一个简单的项目,我打算尝试使用一个是我在使用 Laravel 时。

关于php - 如果我的应用程序的许多 Laravel 4 查询需要是 DB::raw,那么使用 Eloquent 有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20671835/

相关文章:

symfony - EntityManager 已关闭

php - 具有多线程持久化和刷新的 Doctrine Entity Manager

mysql - 在 RDS 中访问 MySQL 或 MS SQL 时,AWS Lambda node.js ETIMEDOUT

mysql - 在 SQL 中将行值显示为列值

php - 2 个表的动态搜索选项

python - SQLAlchemy 不仅通过主键从身份映射中获取项目

Java 堆栈 - ORM 与数据库可伸缩性

Fodora 22 本地主机服务器上的 PhpMyAdmin 空白页

php - MySQL将玩家信息与时间连接起来

php - 将 Evercookie 值传递出函数