V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
no13bus
V2EX  ›  问与答

看了 orm ,active record 看了解释觉得还是有点不太明白。

  •  
  •   no13bus · 2014-05-18 23:09:27 +08:00 · 6402 次点击
    这是一个创建于 3845 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是不是通俗的讲这 2 个东西就是对 sql 语句的封装,M('user')->where(...)->select(...)类似这样的写法,为了加快工作效率?吧数据表弄成对象来整?
    25 条回复    2014-05-19 17:11:26 +08:00
    cbsw
        1
    cbsw  
       2014-05-18 23:16:32 +08:00   ❤️ 1
    ORM 有许多种实现,不知 LZ 看的是哪个 ORM,说清楚大家才能帮你
    no13bus
        2
    no13bus  
    OP
       2014-05-18 23:19:26 +08:00
    thinkphp里面的。
    @cbsw
    no13bus
        3
    no13bus  
    OP
       2014-05-18 23:20:34 +08:00
    @cbsw 当然我说的不是具体实现。我说的是这种东西是不是说就是对 sql 语句的封装,为了加快工作效率?比如不用写sql语句了。
    skydiver
        4
    skydiver  
       2014-05-18 23:28:44 +08:00   ❤️ 1
    看解释没用,真正用过了自然就理解了。不用那么着急弄懂。
    cbsw
        5
    cbsw  
       2014-05-18 23:36:56 +08:00
    首先声明一下我不是 php 程序员,不过使用 python orm 的经验表明 ORM 存在的目的不是效率,毕竟加了一层封装,效率一般不如原生 SQL 语句高,ORM 是为了方便使用,同时也是为了安全,不过在查询时有的 ORM 也的确做了一些优化,比如延迟执行,ORM 的存在很大程度上消除了不同数据库的的差异,这对于使用不同数据库的 Web 开发者来说是非常得力的助手
    no13bus
        6
    no13bus  
    OP
       2014-05-18 23:41:58 +08:00 via Android
    @cbsw 那个active record呢,没发现哪里用了。
    skydiver
        7
    skydiver  
       2014-05-18 23:44:56 +08:00
    @no13bus active record 是来源于 ruby on rails 的……如果真的想深入理解还是去看ror吧……
    Paranoid
        8
    Paranoid  
       2014-05-18 23:49:16 +08:00
    Active Record (AR) 是一个流行的 对象-关系映射 (ORM) 技术。 每个 AR 类代表一个数据表(或视图),数据表(或视图)的列在 AR 类中体现为类的属性,一个 AR 实例则表示表中的一行。 常见的 CRUD 操作作为 AR 的方法实现。因此,我们可以以一种更加面向对象的方式访问数据。


    M('user') 其实就是一个AR model 。。。。。

    PHP 这么多的框架 ,选tp ,做死自己。
    no13bus
        9
    no13bus  
    OP
       2014-05-18 23:55:56 +08:00 via Android
    @Paranoid 多谢。tp为何做死了?我觉得还行。以前从未用过框架。我看一般框架有的东西tp都有。可能是我代码写的少吧。
    zzNucker
        10
    zzNucker  
       2014-05-18 23:57:49 +08:00
    thinkphp真的不太行。。。
    no13bus
        11
    no13bus  
    OP
       2014-05-19 00:00:25 +08:00 via Android
    @zzNucker 木有原因?愿闻其祥
    Paranoid
        12
    Paranoid  
       2014-05-19 00:09:04 +08:00
    @no13bus 框架大部分能做的事情都是一样的,用的爽不爽是一大重点,几年前一个同事项目中用了tp,看了下tp的文档手册,shit 一句一生黑。。。 我想这么多年可能有变化了,到主页上看看文档变了没,下载要登录,4个广告。。。。。 这种东西很主观了,用的没问题继续用就是了 :P
    no13bus
        13
    no13bus  
    OP
       2014-05-19 00:21:32 +08:00 via Android
    恩。多谢。我继续用吧。毕竟还没掌握其优点和缺点
    leebo
        14
    leebo  
       2014-05-19 00:26:12 +08:00 via Android
    我的理解是主要是面对对象 还有就是不写sql 换数据库很方便 比较灵活
    liuxurong
        15
    liuxurong  
       2014-05-19 00:29:33 +08:00
    比其直接写字符串拼接,应该是可以避免一些SQL注入问题。


    @Paranoid 大神怎么评论codeigniter?
    2code
        16
    2code  
       2014-05-19 08:39:34 +08:00
    laravel大法好,退think保平安
    laravel大法好,退codeigniter保平安

    PS:think是我见过最难用的框架,没有之一
    no13bus
        17
    no13bus  
    OP
       2014-05-19 10:45:51 +08:00
    @2code @Paranoid 请教下如何难用?看过一些人说tp很难用,我就接触过这1个框架,也不知道他难用在哪里?或者说别的框架好在哪里?希望给指点下,个人眼界比较窄。
    Paranoid
        18
    Paranoid  
       2014-05-19 11:25:18 +08:00
    @no13bus 这个框架不合我口味而已(我确实带了更多的偏见BS这个框架 :P), 但是它可能合你.

    在你时间可控的状况下, 多试几个框架何尝不是好事, 有比较才能得哪个更适合你. 别人的判断终归是别人的.

    laravel,
    yii,
    codeigniter,
    zend
    .......

    为什么这么多框架,不就是很多人不爽某个中的某点,然后又造出另一个,最终又会被下一个取代.
    zts1993
        19
    zts1993  
       2014-05-19 11:37:01 +08:00 via Android
    不要用tp的ar。。反正我是不用tp3.2开始bug特别多,,楼主要小心,,我一般都自己的写过程去封装,不用AR
    no13bus
        20
    no13bus  
    OP
       2014-05-19 12:15:41 +08:00 via Android
    @Paranoid 多谢。写完了这个项目再用laravel写一遍看看。
    no13bus
        21
    no13bus  
    OP
       2014-05-19 13:42:19 +08:00
    @zts1993 我用的tp3.1.3
    raincious
        22
    raincious  
       2014-05-19 13:51:08 +08:00
    用不着换框架,选个好点的ORM就行了。ThinkPHP应该不会强制你用他自己的ORM的吧。

    可以试着拆个Active Record或者Eloquent下来,或者干脆用Doctrine。或者用Github搜索大法:
    https://github.com/search?o=desc&q=PHP+ORM&ref=cmdform&s=stars&type=Repositories
    no13bus
        23
    no13bus  
    OP
       2014-05-19 16:11:39 +08:00
    @raincious 哦,第一次看到orm是可以换的。框架的orm不是他自己的吗?还可以换呀。
    raincious
        24
    raincious  
       2014-05-19 17:10:38 +08:00
    @no13bus

    当然可以换,只是你不能继续用类似getModel这样的方法了(但其实你可以继承根控制器然后overwrite对应方法)。

    对于ThinkPHP来说应该就是,大约就是你不能用M这样的函数,外加你得用ORM定义的方式来管理Models。

    比如Eloquent,你就得User::find(1),相当于M('User')->find(1);。这得看ORM具体怎么实现的。
    perrywky
        25
    perrywky  
       2014-05-19 17:11:26 +08:00   ❤️ 1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4550 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:10 · PVG 18:10 · LAX 02:10 · JFK 05:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.