【小(xiǎo)編推薦】ThinkPHP3.2——模型定義

2014-06-26  &nδ ✔εbsp;|   發布者:梁國(gu¶✘≥ ó)芳   |  ±✘₽ 查看(kàn):3320次

Thinkphp

模型定義

模型類并非必須定義,隻有(yǒu)當存在獨立的(de)業(yè)務邏輯或ε β者屬性的(de)時(shí)候才需要(yào)定義。

模型類通(tōng)常需要(yào)繼承系統的(de)\→™£Think\Model類或其子(zǐ)類,下(Ω♥&→xià)面是(shì)一(yī)個(gè)Home\ModeΩσ∏l\UserModel類的(de)定義:

  1. namespace Home\Model;
  2. use Think\Model;
  3. class UserModel extends Model {
  4. }

模型類的(de)作(zuò)用(yòng)大(dà)多(duō&€ )數(shù)情況是(shì)操作(zuò)數(s≤¥hù)據表的(de),如(rú)果按照(zhào)×±‍✔系統的(de)規範來(lái)命名模型類的(de)話(huà),大(dà)β ₽✘多(duō)數(shù)情況下(xià)是(shì)可(kě)以自£"(zì)動對(duì)應數(shù)據表。

模型類的(de)命名規則是(shì)除去(q  ù)表前綴的(de)數(shù)據表名稱,采用(yòng)駝峰法命名,$σ>"并且首字母大(dà)寫,然後加上(shàng)模型層的(→‌©de)名稱(默認定義是(shì)Model),例如(r€↑ú):

模型名 約定對(duì)應數(shù)據表(假設數(s  hù)據庫的(de)前綴定義是(shì) think_)
UserModel think_user
UserTypeModel think_user_type

如(rú)果你(nǐ)的(de)規則和(hé)上(sh‍δ§àng)面的(de)系統約定不(bù)符合,那(nà)麽需要(yào)設置M™≠odel類的(de)數(shù)據表名稱屬→ 性,以确保能(néng)夠找到(dào)對(duì)應的(de)數(sh ©☆ù)據表。

數(shù)據表定義

在ThinkPHP的(de)模型裡(lǐ)面,有(yǒu)幾γ§✘♠個(gè)關于數(shù)據表名稱的(de)屬性定義:

屬性 說(shuō)明(míng)
tablePrefix 定義模型對(duì)應數(shù)據表的(de)前綴,如(rú)果未定義則獲取≤¶配置文(wén)件(jiàn)中的(de)DB_PREFIX參數( Ω§§shù)
tableName 不(bù)包含表前綴的(de)數(shù)據表名稱,一(yī)般情況下(λ♠♥xià)默認和(hé)模型名稱相(xiàng)同,隻>₹★☆有(yǒu)當你(nǐ)的(de)表名和(hé)當前的(de)模型類的∑☆™(de)名稱不(bù)同的(de)時(shí)候才需要(yào)定義。
trueTableName 包含前綴的(de)數(shù)據表名稱,也(yě)就(jiù)是(shì)數(• shù)據庫中的(de)實際表名,該名稱無需®'設置,隻有(yǒu)當上(shàng)面的(♥ λ•de)規則都(dōu)不(bù)适用(yòng)的(de♣•£)情況或者特殊情況下(xià)才需要(yào)設置。
dbName 定義模型當前對(duì)應的(de)數(shù)據庫名稱,隻有(☆★yǒu)當你(nǐ)當前的(de)模型類βλ對(duì)應的(de)數(shù)據庫名稱®♥♠¶和(hé)配置文(wén)件(jiàn)不(bù)同的(de)時(shí)↑±βσ候才需要(yào)定義。

舉個(gè)例子(zǐ)來(lái)加深理(l"¶ǐ)解,例如(rú),在數(shù)據庫裡(£★→γlǐ)面有(yǒu)一(yī)個(gè)think_categories表,而我們定義的(de)模型類名稱是(shì)CategoryModel,按照(zhào)系統的(de)約定,這(zhè)個(gè)模型的(de)名稱‌'是(shì)Category,對(duì)應的(de)數(shù)據表名稱應‌&φ該是(shì)think_category(全部小(xiǎo)寫),但(dàn)是(shì)現(xiàn)在的(d∑←e)數(shù)據表名稱是(shì)think_categories,因此我們就(jiù)需要(yào)設置tableName屬性來(lái)改變默認的(de)規則(假 Ωδ設我們已經在配置文(wén)件(jiàn)裡(lǐ)面定義了(le)DB_PREFIX 為(wèi) think_)。

  1. namespace Home\Model;
  2. use Think\Model;
  3. class CategoryModel extends Model {
  4. protected $tableName = 'categories';
  5. }

注意這(zhè)個(gè)屬性的(de)定義不(bù)需要(yào)$‌♥™加表的(de)前綴think_

如(rú)果我們需要(yào)CategoryModel模型對(duì)應操₩≥§≈作(zuò)的(de)數(shù)據表是≤β≤(shì) top_category,那(nà)麽我們隻需要(yào)設置數(sh♥♣₽φù)據表前綴即可(kě):

  1. namespace Home\Model;
  2. use Think\Model;
  3. class CategoryModel extends Model {
  4. protected $tablePrefix = 'top_';
  5. }

如(rú)果你(nǐ)的(de)數(shù)據表直 ↓≤接就(jiù)是(shì)category,而沒有(yǒu)前綴,則可(kě)以設置tablePrefix為(wèi)空(kōng)字符串。

  1. namespace Home\Model;
  2. use Think\Model;
  3. class CategoryModel extends Model {
  4. protected $tablePrefix = '';
  5. }

沒有(yǒu)表前綴的(de)情況必須設置,否則會(δ§ huì)獲取當前配置文(wén)件(jiàn)中的(de) DB_PREFIX

而對(duì)于另外(wài)一(yī)種特殊情況,我們需要(y♥§≈ào)操作(zuò)的(de)數(shù)據 Ω∑表是(shì)top_categories,這(zhè)個(gè)時(shí)候我們就(jiù)需要(yào)定義‌≈ trueTableName 屬性

  1. namespace Home\Model;
  2. use Think\Model;
  3. class CategoryModel extends Model {
  4. protected $trueTableName = 'top_categories';
  5. }

注意trueTableName需要(yào)完整的(de)表名定義。

除了(le)數(shù)據表的(de)定義外(wài),還(hái)可(kě≠<¥)以對(duì)數(shù)據庫進行(xíng)定義(用(yòng)于操作"‌ &(zuò)當前數(shù)據庫以外(wài)的(de)數(s‍★hù)據表),例如(rú) top.top_categories

  1. namespace Home\Model;
  2. use Think\Model;
  3. class CategoryModel extends Model {
  4. protected $trueTableName = 'top_categories';
  5. protected $dbName = 'top';
  6. }

系統的(de)規則下(xià),tableNa φme會(huì)轉換為(wèi)小(xiǎo)寫定義,但(dàn≥εφ)是(shì)trueTableName定義的"δ(de)數(shù)據表名稱是(shì)保持原樣。