我在Laravel query builder和eloquent之间做了一些性能测试.使用各种sql语句( Select 更新删除插入),查询生成器的速度要快得多.

所以我的问题是:为什么有人使用Laravel Elount来对抗普通查询生成器?

推荐答案

Laravel对活动记录模式的实现很有说服力,它有其所有的优点和缺点.

Active Record是以CRUD方式处理单个实体的一个很好的解决方案,即创建一个具有填充属性的新实体,然后将其保存到数据库、从数据库加载记录或删除.

您将从Eloquent的功能中受益匪浅,例如脏判断(仅针对已更改的字段发送SQL更新)、模型事件(例如,当有人创建了新帐户时发送管理alert 或更新统计计数器),特性(时间戳、软删除、自定义特性)Eager /懒惰加载等.您还可以应用域驱动模式,并在活动记录实体中实现一些业务逻辑,例如验证、管理关系、计算等.

但是,正如你已经知道的,Active Record有一些性能价格.

当你处理一条或几条记录时,没有什么好担心的.但对于读取大量记录的情况(例如数据网格、报告、批处理等),普通的Laravel DB方法是更好的方法.

对于我们基于Laravel的应用程序,我们正在使用我们认为合适的两种方法.我们使用Laravel的Elount for UI表单来处理一条记录,并使用DB种方法(由SQL视图支持,带有额外的数据库引擎特定性能调整)来检索UI表、导出任务等的数据.它还可以与RESTful API配合使用——Elount for GET、PUT、POST、,用一个键删除,用DB表示无键GET,但使用过滤器、排序和分页.

Mysql相关问答推荐

更新MySQL表中子记录的序号

在停靠容器中备份和恢复MySQL数据库时出现Unicode字符问题

使用复合主键更新后的MySQL触发器失败

在MySQL的join查询中进行计算

Eloquent:通过国外模型得到平均分

错误:此查询集包含对外部查询的引用,并且只能在子查询中使用

"Shelf服务器容器访问MySQL Docker容器时出现SocketException异常"

如何用sql找出两次之间的差异

如果其中一个表为空,则 mysql 中的查询会给出 0 个结果

错误1075:表定义不正确;只能有一个自动列,它必须定义为一个键(使用 gorm 和 mysql)

在 SQL 中 for each 组返回具有最大值的行,包括具有相同值的行

由于长时间操作而断开连接后,我的 sql 查询是否继续执行?

从 SQL 中的左连接和内连接中减go 计数

MySQL按连续值和计数分组

将每组的总和除以总数

更改整数时间到日期格式 MM/DD/YY,如 python 中的 datetime.fromtimestamp

MySQLi count(*) 总是返回 1

如何在 Laravel 5.1 中获取数据库中的表列表

如何在mysql中连接整数(整数和整数)和varchar(nvarchar和varchar)等数据类型?

MySQL 1062 - 键 'PRIMARY' 的重复条目 '0'