maotao456
V2EX  ›  问与答

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

  •  
  •   maotao456 · Sep 6, 2022 · 8793 views
    This topic created in 1519 days ago, the information mentioned may be changed or developed.

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

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

    41 replies  •  2022-09-07 10:41:56 +08:00
    so1n
    so1n
    Sep 6, 2022
    1
    写了几年一直不习惯 ORM
    wangkun025
    wangkun025
    Sep 6, 2022❤️6
    2
    写 Ruby 就会觉得 ORM 爽了。
    TDWPFk2IRMJPSRae
    TDWPFk2IRMJPSRae
    Sep 6, 2022
    3
    十字螺丝能够被扁平螺丝起子开启,但扁平螺丝不能被十字螺丝起子开启。

    就是一个工具,能快速完成任务才是真理。
    lululau
    lululau
    Sep 6, 2022❤️15
    4
    最烦“就是个工具”这句话了,什么东西不是工具,都是工具咋不用汇编写呢
    hefish
    hefish
    Sep 6, 2022
    5
    我怎么觉着 EloquentORM 挺爽的,是我碰到的最合适的 PHP 的 ORM 了。
    主要是以对象的方式存取数据方便,如果只是取部分字段之类的,那确实 PDO 更直接,省事。
    micean
    micean
    Sep 6, 2022
    6
    orm 很适合写后台查询
    charlie21
    charlie21
    Sep 6, 2022
    7
    orm 是方便使用不同数据库 比如 开发环境数据库 sqlite 生产环境用 mysql 这个时候有 orm 最简单 抹平 /让人不必再关心各个数据库差异
    wonderfulcxm
    wonderfulcxm
    Sep 6, 2022 via iPhone
    8
    我一直觉得手写 SQL 不麻烦,但很多框架都用 orm ,那就用呗。
    lp7631010
    lp7631010
    Sep 6, 2022
    9
    发明锄头 未必还用石块和木棍去刨土 刨的有感觉些?
    daimubai
    daimubai
    Sep 6, 2022❤️2
    10
    没有做过数据报表吗?十几个表一起查的那种
    wakaka
    wakaka
    Sep 6, 2022
    11
    Go 语言写 CRUD 过于繁琐无趣
    www5070504
    www5070504
    Sep 6, 2022❤️1
    12
    go 写 web 略显无趣 写 curd 更无聊
    Dogtler
    Dogtler
    Sep 6, 2022
    13
    Go 写 CURD 是真不如 PHP 。
    得找点并发场景,否则算不上熟练掌握 Go
    ipwx
    ipwx
    Sep 6, 2022
    14
    ummm 现代语言的 ORM 不都能联通 API 请求解析 + 类型校验嘛。。。

    结构体一复杂,手动处理这些都很麻烦。
    ihipop
    ihipop
    Sep 6, 2022 via Android❤️5
    15
    这是因为 go (部分是语言层面限制)没有和 eloquentorm 一样好用的 ORM
    我也写 go ,但是没有冒犯的意思,这就好像和太监没有了性器官一样,说还是清心寡欲对身体好啊一样的。
    tianyou666shen
    tianyou666shen
    Sep 6, 2022
    16
    只要不写一条占满整个屏幕的 sql 一把梭都是挺快的
    tf2
    tf2
    Sep 6, 2022❤️4
    17
    觉得 CURD 没用的,肯定是业务不够复杂

    比如传入参数 a 要生根据值成不同的语句,传入 b 要根据 a 的值联动生成不同的查询。

    拼 sql 不拼死你。一堆 if else 。。。
    fiypig
    fiypig
    Sep 6, 2022
    18
    我用 GORM 也够用啊
    QlanQ
    QlanQ
    Sep 6, 2022
    19
    那只是因为 go 的 orm 不好用罢了,orm 如果需要增加 软删除,只需要 在 模型里面加一个定义就好了,手撸的,你所有的相关 sql 都要检查一遍,临时增加事件也很好用
    hwv2e
    hwv2e
    Sep 6, 2022 via Android
    20
    go 里面 gorm 的确很难用。
    但 go 也有好用的 orm ,ent 了解一下,Facebook 开源的,超级好用,任何 sql 语句都不用写(连条件也不需要写 sql )。
    hwv2e
    hwv2e
    Sep 6, 2022 via Android
    21
    @fiypig ent 了解一下
    xz410236056
    xz410236056
    Sep 6, 2022
    22
    1 、写 sql 不怕写错吗?
    2 、你有没有想过,ORM 的代码大多都是自动生成的?
    anzu
    anzu
    Sep 6, 2022
    23
    喜欢手写 sql 是吧,什么时候表加字段、改字段名、改字段类型的时候……
    yrzs
    yrzs
    Sep 6, 2022
    24
    @hwv2e 确实,go 里最喜欢 ent
    YUyu101
    YUyu101
    Sep 6, 2022❤️1
    25
    手写 sql ,然后碰到根据参数查不同表不同字段的情况下,字符串拼接会很蛋疼,最后不得不造一套 dsl 出来。
    fyooo
    fyooo
    Sep 6, 2022
    26
    ent +1
    bigpigB
    bigpigB
    Sep 6, 2022
    27
    @lululau 说这句话只是为了显得自己有 B 格,你让他不用工具他就跟你急
    arvin01
    arvin01
    Sep 6, 2022
    28
    ent +1
    wdwwtzy
    wdwwtzy
    Sep 6, 2022
    29
    其实 orm 还有一个很重要的作用,就是在编译期发现问题,你写 sql 只能在运行时才发现问题
    nosugar
    nosugar
    Sep 6, 2022
    30
    ORM 好用,大几十张表你就知道了,写 SQL 改起来很麻烦
    maotao456
    maotao456
    OP
    Sep 6, 2022
    31
    @wdwwtzy 我说一下我的体验,ORM 不能消除 SQL 错误,但是手写 SQL 可以先在 Mysql 客户端里面执行了再复制到代码里面,相当于直接调试。 ORM 则是你要程序跑起来才知道写得对不对。
    maotao456
    maotao456
    OP
    Sep 6, 2022
    32
    @daimubai 这种不应该是手写 SQL 最快,且最容易验证的吗?
    maotao456
    maotao456
    OP
    Sep 6, 2022
    33
    @lambdaq if else 是不能消除的,用不用 ORM 都一样(可能我用过的不好), 以一个管理后台为例子:

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

    这样的 if 是无法消除的。
    maotao456
    maotao456
    OP
    Sep 6, 2022
    34
    @xz410236056 SQL 错没错,直接在客户端执行一下就知道了。这不是来得更快吗?
    maotao456
    maotao456
    OP
    Sep 6, 2022
    35
    @YUyu101 这个我承认,不过我现在的做法就是多表联查的聚合数据都用 搜索引擎来替代。也就是管理后台的大部分数据都用搜索引擎来做, 自己写一段不用 SQL 的方法同步数据就好了。
    abcd191898105
    abcd191898105
    Sep 6, 2022 via iPhone
    36
    orm 的在于规范,直接写 sql 格局太小。php 弱类型当然无所谓。
    wdwwtzy
    wdwwtzy
    Sep 6, 2022
    37
    @maotao456 不是啊,ORM 编译期就发现错误了啊,例如你 sql 改其他代码时不小心多加了一个字母 "select * from studenta",你是不知道错误的,只有运行时才能发现,但是 orm 就可以在编译器发现了 db.student.select(),你多加个字母是编译不过的。
    dobelee
    dobelee
    Sep 6, 2022 via iPhone
    38
    where 多的话还是 orm 比较简单。如果是用户端相对简单、稳定的查询,sql 就够了。
    maotao456
    maotao456
    OP
    Sep 7, 2022
    40
    @Biexl 感谢,这个正是我需要的
    tf2
    tf2
    Sep 7, 2022
    41
    @maotao456 但是这样写起来更顺滑啊。不会因为拼 sql 的时候多了少了个字符串导致神奇的 bug 。。。。而且还把类型自动给你搞对了。

    写 orm 语句:只需要考虑业务逻辑
    直接写 sql:考虑业务的同时,需要兼顾查询语法是否通顺

    后者搞多了心智负担会很重。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5107 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 80ms · UTC 08:22 · PVG 16:22 · LAX 00:22 · JFK 03:22
    ♥ Do have faith in what you're doing.