V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
codegeek
V2EX  ›  PHP

PHP 有没有必要使用 ORM?如果使用的话大家有什么好推荐的?

  •  
  •   codegeek · 2015-06-15 22:02:26 +08:00 · 13638 次点击
    这是一个创建于 3230 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在开发的一个项目都是手写SQL,感觉很繁琐啊;

    想用orm,但是有的观点是orm不灵活,而且效率不高;

    这方面有实际经验的小伙伴给个意见吧。

    36 条回复    2019-08-17 11:47:02 +08:00
    cevincheung
        1
    cevincheung  
       2015-06-15 22:10:42 +08:00
    手写sql
    自己封装一些常用的join、insert、update、delete就好了。
    lbp0200
        2
    lbp0200  
       2015-06-15 22:29:18 +08:00 via Android
    laravel里面有,挺方便的
    abelyao
        3
    abelyao  
       2015-06-15 23:15:30 +08:00 via iPhone
    如果用框架的话,一般都自带 ORM 了。
    或者楼主可以搜一个叫 medoo 的类库,封装了 SQL 的操作,挺方便的。
    mcfog
        4
    mcfog  
       2015-06-15 23:32:12 +08:00 via Android
    看你有多少队友,队友的平均&最低战斗力,以及项目打算维护多久决定了

    我个人来说是极其讨厌
    mcfog
        5
    mcfog  
       2015-06-15 23:33:30 +08:00 via Android
    (续)极其讨厌手写sql的,至少也会弄个类似NotORM的dbal来屏蔽sql这件事
    lincanbin
        6
    lincanbin  
       2015-06-16 00:32:03 +08:00   ❤️ 1
    我倒是非常喜欢手写SQL,组装的黑盒看不见里面总是不太高兴。
    SQL并不复杂,最多也就十几二十行,也就直接写了。
    Septembers
        7
    Septembers  
       2015-06-16 02:02:49 +08:00 via Android
    @lincanbin ORM细节不可控,有些意想不到问题就来自这些细节
    yegle
        8
    yegle  
       2015-06-16 03:23:40 +08:00
    手写哈哈哈哈等着被注入吧。好歹绑定个变量啊
    hgc81538
        9
    hgc81538  
       2015-06-16 03:34:57 +08:00 via iPhone
    mahone3297
        10
    mahone3297  
       2015-06-16 07:08:21 +08:00
    有必要,doctrine
    lincanbin
        11
    lincanbin  
       2015-06-16 07:40:40 +08:00 via Android
    @yegle 手写不意味着不做参数绑定。
    yakczh
        12
    yakczh  
       2015-06-16 07:57:09 +08:00
    @mcfog notOrm 对数据库主键定义有约束
    weer0026
        13
    weer0026  
       2015-06-16 08:19:25 +08:00
    用ORM主要是喜欢它可以通过查询取出对象数组。
    c060604
        14
    c060604  
       2015-06-16 08:58:14 +08:00
    orm开发效率高 找些成熟的类库就没什么多大问题
    yangmls
        15
    yangmls  
       2015-06-16 09:02:50 +08:00
    @lincanbin 字段和库更名了,手写改起来就很蛋疼

    不过 ORM 也可以手写 SQL,比如 Yii 就提供过 findBySql 这样的玩意

    不过就算不用 ORM,我感觉 query builder 也是更好的选择
    yakczh
        16
    yakczh  
       2015-06-16 09:07:13 +08:00
    如果用json把sql参数写成配置文件, 就不用写拼字符串了,也不用改代码,这种方式可行吗?
    tabris17
        17
    tabris17  
       2015-06-16 09:08:56 +08:00
    PHP的ORM非常弱逼。也就Phalcon的ORM支持PHQL还凑合
    66beta
        18
    66beta  
       2015-06-16 09:44:41 +08:00
    Laravel Eloquent
    mhycy
        19
    mhycy  
       2015-06-16 09:52:11 +08:00
    用PDO一直都不用拼接字符串。。
    原生支持参数化查询,包装一下就好了
    lujiajing1126
        20
    lujiajing1126  
       2015-06-16 09:57:48 +08:00
    Doctrine
    Agromania
        21
    Agromania  
       2015-06-16 11:13:43 +08:00
    Doctrine or Eloquent

    手写sql。。。等着被注入吧+1
    wingoo
        22
    wingoo  
       2015-06-16 11:33:13 +08:00
    gDD
        23
    gDD  
       2015-06-16 12:16:08 +08:00 via iPhone
    @Agromania 手写不代表会被注入。参数绑定和手写SQL并不冲突。
    fangjinmin
        24
    fangjinmin  
       2015-06-16 12:30:08 +08:00
    ORM不好对SQL优化。还是直接用SQL比较好。
    xujif
        25
    xujif  
       2015-06-16 13:32:21 +08:00
    orm开发,sql优化。为接口编程。
    TangMonk
        26
    TangMonk  
       2015-06-16 13:38:04 +08:00
    Doctrine
    ywisax
        27
    ywisax  
       2015-06-16 14:25:28 +08:00
    长期维护的项目,牺牲一定灵活性和运行效率来换取 编码效率是值得的,我认为有必要用orm。
    php中的orm一般都是做sql拼凑、参数过滤和绑定、部分有缓存功能或query builder,设计得好的话,可以让代码逻辑更加优美。
    框架推荐的话,大型的推荐doctrine/orm,微型的有redbean,适中的有PhpActiveRecord。对个人来说,用得最舒服的orm类库,是yii2的ActiveRecord和kohana的orm module。
    danial
        28
    danial  
       2015-06-16 15:09:28 +08:00
    绝对需要。
    推荐是Doctrine/ORM,lavarel目前还没用过,不做评价。
    bearzk
        29
    bearzk  
       2015-06-16 15:46:48 +08:00
    推荐同事写的 https://github.com/ihabunek/phormium
    虽然他说了 'test before use' 但是其实我们的production api已经在用这个了 :)
    hildert
        30
    hildert  
       2015-06-16 16:24:17 +08:00
    Doctrine
    timsims
        31
    timsims  
       2015-06-16 16:28:04 +08:00
    ORM不灵活这观点从何而来,正因为手写SQL太繁琐才需要ORM

    目前用Laravel Eloquent
    Agromania
        32
    Agromania  
       2015-06-17 11:07:15 +08:00
    @gDD 当然,orm本身都是手写的。但是何必又写一遍呢?一定能做得比别人更尽善尽美吗?
    gDD
        33
    gDD  
       2015-06-17 11:50:36 +08:00
    @Agromania 我的回复里既没有推崇手写 SQL 也没有推崇重造一个 ORM 出来,那么后面两个问号就不是针对我的。另外 ORM 的代码确实是手写出来,但这和本帖的主题「手写 SQL 语句」是两个概念啊。*当然*,手写 SQL 语句不代表会被注入。
    mingyun
        34
    mingyun  
       2015-06-22 00:14:45 +08:00
    @timsims 同推荐
    infatu8
        35
    infatu8  
       2019-08-17 11:44:03 +08:00
    长远考虑,必须手写啊
    直接用 pdo,或在 pdo 的基础之上做简单的封装即可
    什么 orm 都是浮云,当项目越做越大,最后你会发现,你之前用 orm 做的 db 操作 一半都要优化成手写 sql
    另外,手写 sql 不代表着会被注入,凡是认为手写 sql 就会被注入的,证明你功力还不够,基础不行
    infatu8
        36
    infatu8  
       2019-08-17 11:47:02 +08:00
    补充:
    手写 sql 并把相关方法放到模型里去,这样有助于理解什么是模型
    orm 让很多新人误解了模型的概念
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2845 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:34 · PVG 21:34 · LAX 06:34 · JFK 09:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.