數據表定義
在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手冊。