为了账号安全,请及时绑定邮箱和手机立即绑定

将集合与数组返回到前​​端的区别?

将集合与数组返回到前​​端的区别?

PHP
桃花长相依 2021-11-26 15:31:15
背景我正在使用 Laravel 框架进行开发,最近不得不从 SQL 数据库中检索一些数据,分布在几个表中,并且还需要根据某个列聚合结果以方便展示。作为一个通用的解决方案,我认为我至少可以通过两种方式完成任务。编写一个涉及 ::where 和 ->groupBy 以及其他运算符的 Eloquent 查询(我走的路径)构建一个数组数组无论哪种方式,结果都会被发送回显示刀片页面。题使用每种方法的含义是什么?此外,传回一个集合(Eloquent 查询的结果)是否真的意味着您将所有字段数据传递给前端,即使其中大部分数据可能不会被使用?我的想法包括:使用 Eloquent 看起来更优雅,我认为(?)更有效。但是,当只需要这些数据的一个子集时,我似乎将传递带有所有数据的对象。与上述相反,构建数组意味着我必须手动编码,但我的数组包含需要传递回前端的内容,仅此而已。
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

将整个结果集从 DB 海峡返回给请求者不是一个好习惯。您可以在一个非常小的项目或 PoC 中执行此操作,或者在学习某些内容时执行此操作。在其他情况下,您需要一个层来将 DB 中的结果转换为结果数据。这一层也很重要,因为很多时候来自数据库的结果不是我可能需要返回的最终数据,所以我可能需要在返回之前进行一些数据处理/转换/替换。该层是如何实现的 - 这取决于。

使用 Eloquent 看起来更优雅,我认为(?)更有效。但是,当只需要这些数据的一个子集时,我似乎将传递带有所有数据的对象。

这既快速又“肮脏”,从长远来看会导致问题。正如您所提到的,Collection 是一个对象数组,而 Collection 实例本身是一个可遍历的对象,因此您需要有一个中间件将您的对象转换为可序列化的表示,以便 Laravel 可以将其设置为响应。这可能已经在幕后为您完成了。

与上述相反,构建数组意味着我必须手动编码,但我的数组包含需要传递回前端的内容,仅此而已。

这速度较慢,但您可以控制返回的内容。如果您对此转换层没有任何抽象并将该工作保留在控制器中 - 从长远来看,它也会导致问题,因为它将难以维护和重构。

因此,带有抽象转换层的方法是最好的选择,但是是的,它需要事先完成一些额外的工作,这需要一些时间,但从长远来看会给你更好的结果


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 287 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信