数据库 - PHP完全不拼接SQL的ORM是怎么实现的?

WBOY
发布: 2016-06-06 20:37:35
原创
1022 人浏览过

最近看了一些数据抽象层的项目,如Yii框架的ActiveRecord, RedBean, doctrine2, 但由于doctrine2设计得复杂,我还没理清头绪,大致浏览了一下文件,发下它好像完全是抽象成对象,没有拼接SQL语句的。那没有拼接SQL语句是怎么来对数据库进行CRUD的呢?是依靠PDO的接口和方法么?

回复内容:

最近看了一些数据抽象层的项目,如Yii框架的ActiveRecord, RedBean, doctrine2, 但由于doctrine2设计得复杂,我还没理清头绪,大致浏览了一下文件,发下它好像完全是抽象成对象,没有拼接SQL语句的。那没有拼接SQL语句是怎么来对数据库进行CRUD的呢?是依靠PDO的接口和方法么?

不是没有拼接,而是你没有找到罢了。
我先问你,你手动像数据库查询记录,你怎么输入查询语句,它能识别的语句是什么?必须是sql语句吧。
你可以打一下log看看嘛,
就比如 CI框架中 ,就有
$this->db->last_query()类似这种吧

你没有拼接,但是别人肯定是拼接了的,因为数据库只认SQL嘛。
你再仔细看看吧,编辑器全局查找一些关键字,可能找到拼接的那部分代码的。

推荐一个短小精悍的ActiveRecord库,lloydzhou/activerecord · GitHub, 可以实现类似Yii的relation的效果。文档地址:http://lloydzhou.github.io/activerecord/

<code>class User extends ActiveRecord{
  public $table = 'user';
  public $primaryKey = 'id';
  public $relations = array(
    'contacts' => array(self::HAS_MANY, 'Contact', 'user_id')
  );
}
class Contact extends ActiveRecord{
}
$user = new User();
// find one user
var_dump($user->notnull('id')->orderby('id desc')->find());
echo "\nContact of User # {$user->id}\n";
// get contacts by using relation:
//   'contacts' => array(self::HAS_MANY, 'Contact', 'user_id'),
var_dump($user->contacts);</code>
登录后复制
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板