在原始SQL查询中使用Laravel雄辩的ORM的优点很多,并且围绕开发人员的生产力,代码可读性,可维护性和数据库抽象。这是详细的好处:
** 1。提高可读性和表现力
雄辩允许开发人员使用PHP语法和面向对象的模型而不是RAW SQL编写数据库查询。这会导致与自然语言和业务逻辑类似于自然语言和业务逻辑的更可读和表达的代码,与嵌入代码中的复杂的RAW SQL字符串相比,它更容易理解和维护[5] [6]。
** 2。简化的关系管理
雄辩提供内置的支持,以定义和管理数据库表之间的关系(例如Hasmany,allysto,hasone,多态关系)。这使开发人员可以直观地使用相关数据,并以最小的代码检索相关的记录,这将需要复杂的连接和子征服[3] [6]。
** 3。减少上下文切换
使用雄辩意味着开发人员保持在PHP代码范围内,而无需在SQL和PHP之间来回切换。这减少了认知载荷并加快了发展的速度,特别是对于那些不熟悉SQL语法的人[2]。
** 4。增强的可维护性和干燥代码
雄辩通过允许代表表并封装数据库逻辑的模型的定义来鼓励干燥(不要重复自己)方法。数据库交互逻辑的这种集中化使代码库更易于维护和重构[4]。
** 5。数据库可移植性
由于雄辩的摘要数据库层,因此切换基础数据库系统(例如,从MySQL到PostgreSQL)需要最小的代码更改。 RAW SQL查询通常包含数据库特异性语法,这使迁移变得困难,而雄辩会在内部处理这些差异[4]。
** 6。安全福利
雄辩会通过内部使用参数绑定来自动防止SQL注入攻击,从而降低了如果不仔细处理,RAW SQL可能发生的安全漏洞的风险[6]。
** 7。共同运营的更快发展
对于典型的CRUD操作和常见查询,雄辩提供了方便的方法,可以加快开发而无需深入的SQL知识。这对于新手的数据库或想要专注于应用程序逻辑而不是查询优化的开发人员特别有用[3] [5]。
** 8。与Laravel生态系统集成
雄辩将与迁移,播种,验证和事件钩等其他Laravel功能无缝集成,提供了RAW SQL无法开箱即用的凝聚力开发体验[4]。
** 9。复杂查询的高级功能
虽然有时对非常复杂的查询需要原始的SQL,但雄辩的支持高级技术,例如急切的限制,子征服和复杂的关系(例如Hasmanythrough),使开发人员能够以优雅且可维护的方式编写复杂的查询[7]。
** 10。 MVC体系结构中的代码可读性和可维护性
雄辩自然而然地适合Laravel的MVC模式,从而促进了关注点的清洁分离。模型封装数据库逻辑,控制器处理应用程序逻辑,并且视图集中在演示文稿上。与将RAW SQL直接嵌入控制器或视图[3] [6]相比,此分离增强了代码的清晰度和可维护性。
总而言之,雄辩的ORM提供了与Laravel中的数据库进行交互的开发人员友好,表现力和安全的方法,从而提高了代码的可读性,可维护性和可移植性,同时加速了共同任务的开发。 RAW SQL仍可用于至关重要或高度复杂的查询,但雄辩以优雅和效率涵盖了绝大多数典型的应用需求。
引用:
[1] https://laracasts.com/discuss/channels/eloquent/concrete-advantages-of-the-eloquent-orm
[2] https://www.reddit.com/r/laravel/comments/us98hc/hi_im_wondring_when_when_to_to_eloquent_eloquent_and_and_and_when_when_to/
[3] https://stackoverflow.com/questions/49105249/laravel-eloquent-emquent-orm-vs-query-builder-wh-------
[4] https://www.obiikriationz.com/50-laravel-eloquent-orm-functions
[5] https://www.interserver.net/tips/kb/laravel-eloquent-orm/
[6] https://www.linkedin.com/pulse/laravel-eloquent-vs-query-builder-raw-sql-sql-sql-sql-sql-sql-sql-sql-------------------------------------
[7] https://www.linkedin.com/pulse/advanced-eloquent-techniques-mastering-laravels-orm-complex-imzzf
[8] https://www.reddit.com/r/php/comments/2xrs33/been_working_with_raw_raw_mysql_for_years_years_why_should/