tp 里对数据库操作,比如:
SELECT id, name FROM user WHERE id = 1 ORDER BY create_time DESC LIMIT 1
会转换成类似这样的形式:
M('user')->field('id, name')->where(array('id' => 1))->order(array('create_time' => 'DESC'))->limit('1');
在不启用 ActiveRecord/ORM 的情况下,这么做的目的是不是通过连贯操作,将每个方法交给对应数据库驱动来实现,因为不同的数据库语句会有差异?(比如 limit/offset/rownum ),这样在切换驱动时保证原先 model 中的 sql 不需要重写?
还有个小白的问题,既然 SQL 标准在那,为何不同数据库连基本语句都还有差异?
还有 AR/ORM 实现的意义是什么?看到大家都争相实现,数据库本身就可以开启内存缓存查询结果,另外还有 redis/memcached 一大堆缓存工具,为何我要把记录映射成对象存到内存?另外并没有感觉到 get/set/add/save 用起来有多方便?还有跨表简直丧失。。。复杂的 sql 更别提了。。。这东西究竟有何意义?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.