在thinkphp中,我們可以通過tp提供的乙個關鍵字$_map來達到隱藏我們資料庫中表的欄位名的效果。
假設我們的user表裡面有username和email欄位,我們需要對映成另外的字段,定義方式如下:
例子如下:
namespace home\model;
use think\model;
class usermodel extends model
這樣,在表單裡面就可以直接使用name和mail名稱作為表單資料提交了。我們使用create方法建立資料物件的時候,會自動轉換成定義的實際資料表字段。
但注意:使用關鍵字$_map定義字段對映是單向的。也就是說,不會把我們從資料庫差到的欄位名給對映為表單的其他名。
例如:
// 例項化user模型
$user = d('user');
$data = $user->find(3);
dump($data);
輸出結果類似:
array(size=4)
'id' => int 3
'username'=> string 'thinkphp'(length=8) //而不是name
'email' => string '[email protected]' (length=18) //而不是email
'status' => int 1
這個時候取出的data資料報含的是實際的username和email欄位。
如果我們需要在資料獲取的時候自動處理的話,設定開啟read_data_map
引數;
'read_data_map'=>true
這個時候,輸出結果類似:
array(size=4)
'id' => int 3
'name'=> string 'thinkphp'(length=8) //用name 來代替username
'mail' => string '[email protected]' (length=18) //用mail 代替了email
'status' => int 1
也可以用parsefieldsmap 來代替read_data_map的效果
// 例項化user模型
$user = d('user');
$data = $user->find(3);
$data = $user->parsefieldsmap($data);
通過上面的兩種方式後,無論是find還是select方法讀取後的data資料中就包含了name和mail欄位資料了,而不再有username和email欄位資料了。
這樣,使用兩個關鍵字就達到了隱藏我們資料表中的欄位名。
來自:tp手冊
給資料表中的字段新增約束
唯一約束 unique constraint 要求該列唯一,允許為空,但是只能有乙個空值。唯一約束可以確保一列或者幾列不出現重複值。create table t dept id int primary key,name varchar 22 unique location varchar 50 例如...
MySQL修改資料表中的欄位名
在一張資料表中只能設定乙個唯一名稱的欄位名。在同一張資料表中,不能出現兩個名稱完全相同的欄位名。因此,資料庫系統可以通過欄位名來區分資料表中的不同字段。在mysql中,alter table語句也可以修改資料表的欄位名。基本語法格式如下 alter table 表名 change 舊欄位名 新欄位名...
如何獲得SBO中資料表的中文注釋與字段的中文說明
有朋友問 在sbo sdk開發中,如何獲得sbo中資料表的中文描述以及資料表中字段的中文說明?在sbo di api和di server api中都可以通過sdk提供的功能提取sbo中的資料表及其中文描述,提取sbo中指定資料表的字段列表及其字段屬性。1 di api sdk開發中讀取中文描述的方法...