doctrine安裝和配置
- doctrine2現(xiàn)在使用composer進(jìn)行快捷的安裝先誉。在項(xiàng)目目錄中增加一個(gè)composer.json文件湿刽,內(nèi)容如下:
{
"require" : {
"doctrine/orm" : "*" // 或者"v2.5.*"
}
}
然后在命令行中運(yùn)行 composer install
進(jìn)行安裝。composer安裝請參考 composer 安裝
- 安裝完成后褐耳,可以在項(xiàng)目的入口文件中直接使用composer提供的自動(dòng)加載類進(jìn)行擴(kuò)展包中類的自動(dòng)加載诈闺。使用
require_once "paht\vendor\autoload.php"
。 - 要使用doctrine提供的ORM功能铃芦,首先必須先實(shí)例化一個(gè)實(shí)體管理器EntityManager雅镊。實(shí)例化代碼如:
require_once "vendor/autoload.php";
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
// 指定entity文件存放位置
$paths = array("/path/to/entity-files");
// 指定開發(fā)模式
$isDevMode = false;
// ?設(shè)置數(shù)據(jù)庫連接參數(shù)
$dbParams = array(
'driver' => 'pdo_mysql',
'user' => 'root',
'password' => 'root',
'dbname' => '?doctrine',
);
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($dbParams, $config);
如果是開發(fā)模式為true時(shí)毫胜,緩存將使用文件數(shù)組進(jìn)行緩存埠褪,關(guān)聯(lián)對象將在每次的請求重新進(jìn)行創(chuàng)建那槽;如果開發(fā)模式是false時(shí)忙厌,將會(huì)自動(dòng)按照APC,Xcache妻献,Memcache慌盯,redis的順序查找緩存數(shù)據(jù)掌挚,直到無法找到時(shí)老客,從數(shù)據(jù)庫獲攘欧埂;代理類必須通過命令行進(jìn)行顯示的創(chuàng)建胧砰,如果代理類存放文件夾不存在時(shí)使用系統(tǒng)的臨時(shí)目錄。
- doctrine 提供了很多有用的命令行工具苇瓣,可以使用此命令進(jìn)行調(diào)用
php vendor/bin/doctrine
尉间。要使用此這些命令,你可以在項(xiàng)目目錄中創(chuàng)建一個(gè)cli-config.php
文件,來讓實(shí)例化好的實(shí)體管理器注冊到命令工具中哲嘲,文件內(nèi)容如下:
use Doctrine\ORM\Tools\Console\ConsoleRunner;
// 項(xiàng)目入口文件贪薪,里面包含一個(gè)創(chuàng)建好的實(shí)體管理器
require_once 'index.php';
return ConsoleRunner::createHelperSet($entityManager);
映射
在doctrine中通過實(shí)體對象Entity
來進(jìn)行數(shù)據(jù)的存取,文件中通過文檔塊注釋來定義映射的元數(shù)據(jù)結(jié)構(gòu)來指定數(shù)據(jù)如何進(jìn)行存取眠副。如以下的用戶表例子:
/**
* @Entity
* @Table(name="users")
*/
class User
{
/**
* 聲明此字段為主鍵字段画切,自增及使用int類型
* @Id
* @Column(type="integer")
* @GeneratedValue
*/
private $id;
/**
* 用戶名
* @Column(type="string", length=36)
*/
private $username;
/**
* 密碼(32位char類型)
* @Column(type="string", columnDefinition="char(32) not null default '' ")
*/
private $password;
/**
* 手機(jī)號碼(11位char類型,唯一索引)
* @Column(type="string", unique=true, columnDefinition="char(11) not null default '' ")
*/
private $mobile;
/**
* 性別
* @Column(type="boolean")
/*
private $gender;
/**
* 出生日期
* @Column(type="date")
/*
private $birthday;
/**
* 積分
* @Column(type="integer")
*/
private $integral;
/**
* 最后登錄時(shí)間(可用integer)
* @Column(type="datetime")
*/
private $last_login;
/**
* 余額
* @Column(type="decimal", precision=10, scale=2)
*/
private $balance;
}
- name:指定映射的數(shù)據(jù)庫列名稱囱怕,不指定時(shí)默認(rèn)使用屬性名霍弹。
- type:指定映射的數(shù)據(jù)庫中列的類型。不指定時(shí)默認(rèn)為string類型即對應(yīng)mysql的varchar(255)娃弓。
- length:指定列類型是string時(shí)的長度典格,如:length=32對應(yīng)mysql的varchar(32),不指定時(shí)默認(rèn)為255台丛。
- unique: 指定列添加唯一索引耍缴,默認(rèn)為false。
- nullable: 指定列是否可空挽霉,默認(rèn)為false防嗡。
- precision:指定列為decimal類型時(shí),可存儲(chǔ)的最大值侠坎。
- scale: 指定列位decimal類型時(shí)蚁趁,小數(shù)點(diǎn)后的精度位數(shù)。
- columnDefinition:直接使用數(shù)據(jù)庫定義語句DDL片段進(jìn)行指定硅蹦。如:columnDefinition="char(32) not null "荣德。
- options: 通過鍵值對參數(shù)設(shè)置數(shù)據(jù)庫定義語言參數(shù)。如:options=[ "nullable" => false, "unsigned" => true, "default" => ''];
基本映射類型(Mysql):
string => varchar; integer => int; smallint => smallint; bigint => bigint;
boolean => tinyint; decimal => decimal; date => datetime; time => time;
datetime => timestamp;
text => text;
object => text(serialize()/unserialize());
array => text(serialize()/unserialize())童芹;
simple_array => text(implode()/explode())涮瞻;
json_array => text(json_encode()/json_decode())