Thinkphp 模型與表名定義

數據表定義

在ThinkPHP的模型裏面,有幾個關於數據表名稱的屬性定義:

屬性 說明
tablePrefix 定義模型對應數據表的前綴,如果未定義則獲取配置文件中的DB_PREFIX參數
tableName 不包含表前綴的數據表名稱,一般情況下默認和模型名稱相同,只有當你的表名和當前的模型類的名稱不同的時候才需要定義。
trueTableName 包含前綴的數據表名稱,也就是數據庫中的實際表名,該名稱無需設置,只有當上面的規則都不適用的情況或者特殊情況下才需要設置。
dbName 定義模型當前對應的數據庫名稱,只有當你當前的模型類對應的數據庫名稱和配置文件不同的時候才需要定義。

 

例如,在數據庫裏面有一個think_categories表,而我們定義的模型類名稱是CategoryModel,按照系統的約定,這個模型的名稱是Category,對應的數據表名稱應該是think_category(全部小寫),但是現在的數據表名稱是think_categories,因此我們就需要設置tableName屬性來改變默認的規則(假設我們已經在配置文件裏面定義了DB_PREFIX 爲 think_)。

namespace Home\Model;

use Think\Model;

class CategoryModel extends Model {

protected $tableName = 'categories';

}

注意這個屬性的定義不需要加表的前綴think_


如果我們需要CategoryModel模型對應操作的數據表是 top_category,那麼我們只需要設置數據表前綴即可:


namespace Home\Model;

use Think\Model;

class CategoryModel extends Model {

protected $tablePrefix = 'top_';

}


如果你的數據表直接就是category,而沒有前綴,則可以設置tablePrefix爲空字符串。

namespace Home\Model;

use Think\Model;

class CategoryModel extends Model {

protected $tablePrefix = '';

}

沒有表前綴的情況必須設置,否則會獲取當前配置文件中的 DB_PREFIX

 

對於另外一種特殊情況,我們需要操作的數據表是top_categories,這個時候我們就需要定義 trueTableName 屬性

namespace Home\Model;

use Think\Model;

class CategoryModel extends Model {

protected $trueTableName = 'top_categories';

}

注意trueTableName需要完整的表名定義。


除了數據表的定義外,還可以對數據庫進行定義(用於操作當前數據庫以外的數據表),例如 top.top_categories

namespace Home\Model;

use Think\Model;

class CategoryModel extends Model {

protected $trueTableName = 'top_categories';

protected $dbName = 'top';

}

系統的規則下,tableName會轉換爲小寫定義,但是trueTableName定義的數據表名稱是保持原樣。因此,如果你的數據表名稱需要區分大小寫的情況,那麼可以通過設置trueTableName定義來解決。

 

實例化空模型類後還可以用table方法切換到具體的數據表進行操作:

$model = M();

$model ->table("top_user")->find();



 

 

來自tp手冊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章