自从学了 Go 之后对 ORM 就越来越无感了

2022-09-06 10:08:02 +08:00
 maotao456

第一门开发语言是 PHP ,尤为喜欢 Laravel 里面的 ORM , 后来学了 Go ( sqlx ),反而觉得 ORM 这种东西没啥用处,还不如手写 SQL 来得快和直观。

现在写回 PHP ,都是直接 PDO 了。

6664 次点击
所在节点    问与答
41 条回复
hwv2e
2022-09-06 13:45:09 +08:00
@fiypig ent 了解一下
xz410236056
2022-09-06 14:12:23 +08:00
1 、写 sql 不怕写错吗?
2 、你有没有想过,ORM 的代码大多都是自动生成的?
anzu
2022-09-06 14:27:54 +08:00
喜欢手写 sql 是吧,什么时候表加字段、改字段名、改字段类型的时候……
yrzs
2022-09-06 15:04:14 +08:00
@hwv2e 确实,go 里最喜欢 ent
YUyu101
2022-09-06 15:53:24 +08:00
手写 sql ,然后碰到根据参数查不同表不同字段的情况下,字符串拼接会很蛋疼,最后不得不造一套 dsl 出来。
fyooo
2022-09-06 16:04:29 +08:00
ent +1
bigpigB
2022-09-06 16:33:42 +08:00
@lululau 说这句话只是为了显得自己有 B 格,你让他不用工具他就跟你急
arvin01
2022-09-06 17:06:49 +08:00
ent +1
wdwwtzy
2022-09-06 17:26:09 +08:00
其实 orm 还有一个很重要的作用,就是在编译期发现问题,你写 sql 只能在运行时才发现问题
nosugar
2022-09-06 17:54:14 +08:00
ORM 好用,大几十张表你就知道了,写 SQL 改起来很麻烦
maotao456
2022-09-06 18:33:42 +08:00
@wdwwtzy 我说一下我的体验,ORM 不能消除 SQL 错误,但是手写 SQL 可以先在 Mysql 客户端里面执行了再复制到代码里面,相当于直接调试。 ORM 则是你要程序跑起来才知道写得对不对。
maotao456
2022-09-06 18:34:16 +08:00
@daimubai 这种不应该是手写 SQL 最快,且最容易验证的吗?
maotao456
2022-09-06 18:36:11 +08:00
@lambdaq if else 是不能消除的,用不用 ORM 都一样(可能我用过的不好), 以一个管理后台为例子:

if (isset($request->name)) {
$orm->where('name', $request->name);
}

这样的 if 是无法消除的。
maotao456
2022-09-06 18:37:30 +08:00
@xz410236056 SQL 错没错,直接在客户端执行一下就知道了。这不是来得更快吗?
maotao456
2022-09-06 18:39:05 +08:00
@YUyu101 这个我承认,不过我现在的做法就是多表联查的聚合数据都用 搜索引擎来替代。也就是管理后台的大部分数据都用搜索引擎来做, 自己写一段不用 SQL 的方法同步数据就好了。
abcd191898105
2022-09-06 19:15:08 +08:00
orm 的在于规范,直接写 sql 格局太小。php 弱类型当然无所谓。
wdwwtzy
2022-09-06 19:46:31 +08:00
@maotao456 不是啊,ORM 编译期就发现错误了啊,例如你 sql 改其他代码时不小心多加了一个字母 "select * from studenta",你是不知道错误的,只有运行时才能发现,但是 orm 就可以在编译器发现了 db.student.select(),你多加个字母是编译不过的。
dobelee
2022-09-06 20:02:13 +08:00
where 多的话还是 orm 比较简单。如果是用户端相对简单、稳定的查询,sql 就够了。
Biexl
2022-09-06 22:46:37 +08:00
maotao456
2022-09-07 09:59:41 +08:00
@Biexl 感谢,这个正是我需要的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/877991

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX