PHP操作数据库——ORM

2016-10-21  本文已影响210人  CommandM

对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

实现声明下这ORM不是用来弥补不会SQL的技能缺失的。SQL是一项简单基本且必须不可或缺的后端知识。

举点ORM的缺点:

  1. 无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。
  2. 对象的查询语言(X-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本.
  3. 复杂查询,ORM仍然力不从心。虽然可以实现,但是不值的。

几乎所有大的框架都有带ORM功能,例如laravel。

我这里举栗子的叫doctrine想必很多大佬都知道的吧……它在packagist.org也就是composer上提交了很多库……相当好评!

……然后就变成了doctrine的介绍了……

Doctrine是基于数据库抽像层上的ORM,它可以通过PHP对象轻松访问所有的数据库,例如Mysql。

我们这样下载:在项目里 composer require doctrine/orm

<?php
// bootstrap.php
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
require_once "vendor/autoload.php";

// 创建一个默认的Docrine ORM配置 
$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), $isDevMode);
// 如果你喜欢yaml或XML(yaml要添加symfony/yaml)
//$config = Setup::createXMLMetadataConfiguration(array(__DIR__."/config/xml"), $isDevMode);
//$config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/config/yaml"), $isDevMode);

// 数据库配置参数
$conn = array( 
    //'driver' => 'pdo_sqlite', 
    //'path' => __DIR__ . '/db.sqlite',
    'driver' => 'pdo_mysql', 
    'user' => 'root', 
    'password' => '', 
    'dbname' => 'foo',
);
// 获取实体管理器
$entityManager = EntityManager::create($conn, $config);
<?php
// src/Product.php
class Product{
    /** * @var int */ 
    protected $id; 
    /** * @var string */ 
    protected $name;
    public function getId() { 
        return $this->id; 
    } 
    public function getName() { 
        return $this->name; 
    } 
    public function setName($name) { 
        $this->name = $name; 
    }
}
上一篇下一篇

猜你喜欢

热点阅读