看了 orm ,active record 看了解释觉得还是有点不太明白。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
no13bus
V2EX    问与答

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

  •  
  •   no13bus 2014-05-18 23:09:27 +08:00 6679 次点击
    这是一个创建于 4169 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是不是通俗的讲这 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     Solana     982 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 22:38 PVG 06:38 LAX 15:38 JFK 18:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86