实习程序员用世界上最好的语言造了一个 ORM 轮子

2017-01-03 16:10:51 +08:00
 mateor95

如题目所述,

请诸位大大帮我看看

项目地址: https://github.com/mateor95/ORM

文档地址: https://mateor.me/archives/61

8680 次点击
所在节点    PHP
74 条回复
murmur
2017-01-03 16:57:01 +08:00
@wyntergreg 我知道 php 界喜欢自己从 0 开始造框架,但是要知道项目越大越需要 orm 框架保证代码的规范和可读性
如果按照现在的风气,小项目上什么 mysql ,用 mongo 不就好了么
mybatis 都到现在还被批判,就是因为 orm 实现的不彻底,每一行 sql 都要自己去写
mateor95
2017-01-03 16:58:39 +08:00
@murmur 轮子预留了过滤空间的,所有 SQL 执行之前都是会先执行 checkParam (),之所以用 pdo 但是却不用 pdo 的过滤,是因为考虑到换库或者跨库的时候可能用的不是 MYSQL
Charkey
2017-01-03 16:59:46 +08:00
mybatis 是有点麻烦,任何一个库都要重新定义实体类?不需要,使用代码生成。
mateor95
2017-01-03 17:01:16 +08:00
@Charkey 原来我一直 ORM 的用法用错了...
murmur
2017-01-03 17:01:42 +08:00
@mateor95 哦那不错哦,连这点都考虑到了,但是我印象中 php<5.4 的时候似乎是有本地过滤的 bug (对于 gbk 编码?年代久远记不清了,我那时候还用的 php5.2 ),必须通过配置强制转到 mysql 上做参数处理
现在这个 bug 早改了吧, pdo 新版不能对所有数据库用统一的参数过滤么
mateor95
2017-01-03 17:03:24 +08:00
@murmur 啊,这个我不清楚啊,我接触 PHP 的时候版本已经 5.6 了...
murmur
2017-01-03 17:05:43 +08:00
实体类有个好处就是 对于 java 这种语言 他拿掉 bean 之后 直接打一个.就知道里面有什么字段了 每种字段也带了类型 这个从数据库读数据可以强转 反过来从前端接数据也可以做过滤和校验操作
更彻底一点,接口中带上 bean ,用接口的人也知道该传啥玩意进来,要不现在为啥 ts 都跟着凑热闹搞强类型
要不为啥会有 bean validatition 这些东西
java 风雨中走来 一路被批判 从未倒下 这些设定不是白做的
RE
2017-01-03 17:07:53 +08:00
楼主可以看看 medoo - http://medoo.in/
jhdxr
2017-01-03 17:08:37 +08:00
@mateor95 PDO 又不是和 mysql 绑定的: http://php.net/manual/zh/intro.pdo.php 『 PDO 提供了一个 数据访问 抽象层』
mateor95
2017-01-03 17:10:54 +08:00
@RE 感谢大大
Kilerd
2017-01-03 17:11:21 +08:00
naive
1 、不懂什么是 ORM , 居然还在博客里面写了 ORM 的介绍。 6666
2 、就想问问,你的 sql 从来没用过 OR ?? 你的 where 只能用 AND 相连???
mateor95
2017-01-03 17:12:43 +08:00
@Kilerd 好像是这么回事,我研究下怎么改
RE
2017-01-03 17:14:55 +08:00
@mateor95

过奖了 :)
就是觉得楼主这东西既然不是完整的 orm ,那跟这个 medoo 还挺像的,大概可以描述为 “数据库对象式操作类” 吧,这个 medoo 很轻很好用,我在很多微型 app 中直接用的,据说是开发团队用于从 https://catfan.me/ 这个项目中剥离出来的。
hekunhotmail
2017-01-03 17:42:00 +08:00
果然是最好的语言
q397064399
2017-01-03 18:16:32 +08:00
话说 PHP 有反射了么?没有反射 ORM 个鸡巴啊, Java 的 ORM 是直接告诉框架 我这里有个实体类,
框架你自己看着办,给老子反射一下吧 自动映射字段
q397064399
2017-01-03 18:19:50 +08:00
你要是用过 Hibernate 等 Java 重型 ORM 框架就知道了,
这些类,只要 在字段上做好了 @声明, ORM 框架会自动根据
实体类之间的映射关系 生成 SQL 而且基本的增删改查都不用自己写,
框架给你自动生成了 最原始的十几种增删改查

而这些玩意的实现都依赖反射技术, php 如果没有反射,自然没有 ORM 一说
kankana
2017-01-03 18:35:05 +08:00
@q397064399 php 有反射。
doctrine 就有你说的,字段注解……
jarlyyn
2017-01-03 18:49:21 +08:00
@q397064399

连 Js 都有 orm 了,为什么 Php 会没有。

java 需要 orm 需要反射是 java 自己的问题,和其他语言没关系。

要是你看了 js 的类是什么东西,你还不得懵逼了……
greatonce
2017-01-03 18:50:23 +08:00
@q397064399 PHP 有反射 http://php.net/manual/en/book.reflection.php

估计你也对 PHP 不了解,另外 ORM 不一定要反射模型,也可以通过解析 schema 的方式做。

楼主还没弄懂什么是 ORM , ODM , ActiveRecord , ModelRelation ,就开始装逼了,结果失败了。
murmur
2017-01-03 18:52:08 +08:00
@greatonce 厉害了,真的是世界上最好的语言

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/331924

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX