很喜欢 Doctrine,如果不太在意性能的话。很适合OA 啊、企业应用等业务逻辑复杂但对性能没有极端要求的情景。
建网站原本是网站策划师、网络程序员、网页设计师等,应用各种网络程序开发技术和网页设计技术配合操作的协同工作。创新互联专业提供成都网站设计、成都网站制作,网页设计,网站制作(企业站、响应式网站、电商门户网站)等服务,从网站深度策划、搜索引擎友好度优化到用户体验的提升,我们力求做到极致!
吐槽一下,我不喜欢 Active Record 类型的 ORM 主要是我实在无法理解一个 Model 竟然都继承自一个可直接操作数据库的基类。一个业务模型跟数据库有毛关系啊? 我的数据可能来自或持久化到四面八方(数据库、文件、缓存、第三方API等等),最多也是组合一个仓库类到自身而不是直接继承某个数据库类。DataMapper 才是解决之道。你可以去后盾网看看嘛,那里面还是不错的,还有教学视频可以看。如果刚开始学习还可以找讲师教。
大多都是写sql的,但是不是直接写sql,而是封装过的sql类,帮你解决了一些xss和注入,类似于
$this-sqldb-select("*")-from("user")-where("id", "1")-do();
//select * from `user` where `id`="1";
php也有orm框架,sql简单的比较好弄,复杂的就不行了。
orm其实就是降低灵活性,增加方便简便的特性。
众所周知,简便与灵活是不可以并存的。
由于orm隐藏了一层,那层如果发生了什么特殊的事情不好调试,所以其实复杂的项目,并不适合orm,灵活性才是王道,但是又不能直接写sql吧,太容易出问题,所以就有了上面那种方式。
RM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却是关系型的。为了可以靠贴近面向对象开发,我们想要像操作对象一样操作数据库。
举个例子:获取一篇文章,传统的方式先要执行一个sql检索数据
select * from post where id = 1
然后输出标题和内容使用
echo $post['title']; echo $post['content'];
在thinkphp中,就解决了这个问题,其原理也很简单:
$post = postTable::getInstance()-find(1);#会再内部执行select * from post where id = 1
然后输出:
echo $post-getTitle();
echo $post-getContent();
妈妈再也不用担心我的强迫症了^_^
高级点的应用,文章和分类是一对多关系、文章和标签是多对多关系
$cate = $post-getCategory(); //获取文章分类
echo $cate-getName(); //获取分类名
$tags = $post-getTags(); //获取一个文章的所有标签
使用方法更是简单,比如:
$list = M()-where()-field()-order()-find()/select()/getField(),等等,在其手册中可以很容易找到,也很容易使用。
ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。可以在PHP开发的业务逻辑层,通过数据访问层来处理。ORM就是数据访问层强大的一种解决方案。通过它,可以最大限度隔离业务逻辑层和数据源之间的耦合度