TP中可通過字段對映隱藏資料表的欄位名

2021-07-04 04:59:06 字數 1682 閱讀 4711

在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開發中讀取中文描述的方法...