doctrine基礎(chǔ)(一)

doctrine安裝和配置


  1. 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 安裝

  1. 安裝完成后褐耳,可以在項(xiàng)目的入口文件中直接使用composer提供的自動(dòng)加載類進(jìn)行擴(kuò)展包中類的自動(dòng)加載诈闺。使用require_once "paht\vendor\autoload.php"
  2. 要使用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í)目錄。

  1. 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())

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市假褪,隨后出現(xiàn)的幾起案子署咽,更是在濱河造成了極大的恐慌,老刑警劉巖生音,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宁否,死亡現(xiàn)場離奇詭異,居然都是意外死亡缀遍,警方通過查閱死者的電腦和手機(jī)慕匠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來域醇,“玉大人台谊,你說我怎么就攤上這事蓉媳。” “怎么了锅铅?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵酪呻,是天一觀的道長。 經(jīng)常有香客問我盐须,道長玩荠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任贼邓,我火速辦了婚禮阶冈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘立帖。我一直安慰自己眼溶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布晓勇。 她就那樣靜靜地躺著堂飞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绑咱。 梳的紋絲不亂的頭發(fā)上绰筛,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機(jī)與錄音描融,去河邊找鬼铝噩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窿克,可吹牛的內(nèi)容都是我干的骏庸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼年叮,長吁一口氣:“原來是場噩夢啊……” “哼具被!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起只损,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤一姿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后跃惫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叮叹,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年爆存,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛉顽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡先较,死狀恐怖蜂林,靈堂內(nèi)的尸體忽然破棺而出遥诉,到底是詐尸還是另有隱情拇泣,我是刑警寧澤噪叙,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站霉翔,受9級特大地震影響睁蕾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜债朵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一子眶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧序芦,春花似錦臭杰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宪塔,卻和暖如春磁奖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背某筐。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工比搭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人南誊。 一個(gè)月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓身诺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抄囚。 傳聞我的和親對象是個(gè)殘疾皇子霉赡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容