1. 程式人生 > >TP中可通過欄位對映隱藏資料表的欄位名

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

在ThinkPhP中,我們可以通過TP提供的一個關鍵字$_map來達到隱藏我們資料庫中表的欄位名的效果。

假設我們的User表裡面有username和email欄位,我們需要對映成另外的欄位,定義方式如下:

例子如下:

namespace Home\Model;
use Think\Model;
Class UserModel extends Model{
     protected $_map = array(
         'name' =>'username', // 把表單中name對映到資料表的username欄位
         'mail'  =>'email', // 把表單中的mail對映到資料表的email欄位
     );}

這樣,在表單裡面就可以直接使用name和mail名稱作為表單資料提交了。我們使用create方法建立資料物件的時候,會自動轉換成定義的實際資料表字段。


但注意:使用關鍵字$_map定義欄位對映是單向的。也就是說,不會把我們從資料庫差到的欄位名給對映為表單的其他名。

例如:

// 例項化User模型
$User = D('User');
$data = $User->find(3);
dump($data);

輸出結果類似:
array(size=4) 
'id'      => int 3    
'<strong>username</strong>'=> string 'thinkphp'(length=8)   <span style="font-family: Arial, Helvetica, sans-serif;">//而不是name</span>
'<strong>email</strong>'   => 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    
'<strong>name</strong>'=> string 'thinkphp'(length=8)   //用name 來代替username
'<strong>mail</strong>'   => 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手冊


相關推薦

TP通過對映隱藏資料

在ThinkPhP中,我們可以通過TP提供的一個關鍵字$_map來達到隱藏我們資料庫中表的欄位名的效果。 假設我們的User表裡面有username和email欄位,我們需要對映成另外的欄位,定義方式如下: 例子如下: namespace Home\Model;use Th

java自定義列舉enum對映到mysql資料庫處理器handler

今年企業對Java開發的市場需求,你看懂了嗎? >>>   

MySQL如何用一個更新另一個中欄

1,修改1列 update student s, city c set s.city_name = c.name where s.city_code = c.code; 2,修改多個列 update a, b set a.title=b.title, a.name=b.name wh

Mysql新增到大資料導致鎖

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">      年初跳完槽,終於可以安心開始寫一些部落格了。進入新的公司,還

MyBatis學習-----解決在"資料中欄與自己定義的屬性類的屬性不相同“的情況下的問題

  在平時的開發中,我們表中的欄位名和表對應實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決欄位名與實體類屬性名不相同的衝突。 一、準備演示需要使用的表和資料 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCRE

在C# WinForm如何建立SQL Server資料庫和資料

【1】動態建立資料庫方法(例項),你可以在WinForm中新增一個文字框,輸入資料庫名稱,這個就不用我囉嗦了吧。將下面的第一句改為 string myExecuteQuery = "create database "+textBox1.Text.Trim(); //建立te

android 檢測sqlite資料中欄(列)是否存在

一般資料庫升級時,需要檢測表中是否已存在相應欄位(列),因為列名重複會報錯。方法有很多,下面列舉2種常見的方式: 1、根據 cursor.getColumnIndex(String columnName) 的返回值判斷,如果為-1表示表中無此欄位 /** * 方法1:檢

SQL刪除資料中欄時出現【由於一個或多個物件訪問此列,ALTER TABLE DROP COLUMN *** 失敗。 】

今天做個功能,先是在程式中向資料表中新增欄位,然後再刪除該表中不需要的欄位,第一步的時候還是蠻順利的,可是第二步時就卡那裡了,刪除不了。提示出現了 當然,這個圖片是我在SQL裡去測試時截的,vs後臺刪不了其實也是這個原因。找了好多辦法來解決都沒搞定,後面知道是約束的問

MySQL為空的設定為NULL還是NOT NULL

 Bruin  2個月前 (06-23)  316瀏覽  0評論 經常用mysql的人可能會遇到下面幾種情況: 1、我欄位型別是not null,為什麼我可以插入空值 2、為什麼not null的效率比null高 3、判斷欄位不為空的時候,到底要用 selec

tp資料去重並獲取自定義

在專案中用到了TP的去重功能,將其中的坑和一些收穫記錄下來 用文件中提供的distinct方法去重只能獲取資料中能獲取field中的欄位資料,程式碼如下 //會員模型 $member_mod

ThinkPHP 5過濾資料不存在的

最近在做專案的時候,為了方便資料表的新增或者更新操作,有時會重新命名資料表中欄位的名稱(這裡的重新命名只是在Model層,而不是在資料表裡),在網上查詢了一下,又看了一下ThinkPHP 5完全開發手冊,有兩種方法可以解決這個問題。  我出現的問題如下:  這裡的old_go

Django如何在前臺顯示一對多的關係

在使用Django寫python-web專案時遇到了問題個大家分享一下: 如何才能在前臺顯示一對多的關係,例如存在以下關係: from django.db import models #訂單詳情 class OrderInfo(models.Model): oid=models.

jsp頁面JSTL/EL標籤引用java後臺靜態static的方法總結

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

將List某個相同的資料相加(統計出現了幾次)

//取出初始資料 List<LdpaMtxfjlb> LdpaMtxfjlbList = ldpaMtxfjlService.selectAllInfo(); Map<String,Integer> map = new HashMap<>();

SpringBoot:SpringData JPA:進階查詢—JPQL/原生SQL查詢、分頁處理、部分對映查詢

上一篇介紹了入門基礎篇SpringDataJPA訪問資料庫。本篇介紹SpringDataJPA進一步的定製化查詢,使用JPQL或者SQL進行查詢、部分欄位對映、分頁等。本文儘量以簡單的建模與程式碼進行展示操作,文章比較長,包含查詢的方方面面。如果能耐心看完這篇文章,你應該能使用SpringDataJ

儲存過程 ------ 通過一個條件更新另外一個

儲存過程 ------ 通過一個欄位條件更新另外一個欄位 同一表的操作,我當時是用來通過推薦人賬號,更新推薦人id欄位 BEGIN DECLARE t_uid INT(11) DEFAULT 0; DECLARE t_username VARCHAR(255) DEFAULT

mysql為使用者設定資料庫,資料(列)的訪問許可權

1、mysql中對指定使用者,授予某些資料庫,資料表或者欄位訪問許可權 語法: GRANT PRIVILEGES ON DATA.TABLE TO USERS; 溫馨提示: 授權後可以使用2中命令進行使用者許可權許可權,也可以直接重啟mysql程序方式進行許可權重新整理。 A

hive判斷A時間是否在B的兩個時間及求訂單中間休息時間

問題:在hive中,A表中有一個時間的欄位,型別位string,格式為2018-12-0 13:34:12;在B表中有欄位start_time和end_time,型別為string,格式為2018-12-06 13:34:12,先需要將兩表按id關聯後新增一個標記欄位(當A表的時間在B表的s

Thinkphp 對映用法及作用

      在填寫表單的時候,為了不讓攻擊網站,為了安全起見,ThinkPHP的欄位對映功能可以讓你在表單中隱藏真正的資料表字段,而不用擔心放棄自動建立表單物件的功能。 1,建立資料 namespace Home\Model; use Think\Model; Class

通過Field (反射)給私有賦值

public class Person { public String name; public char sex; private int age; public String getName() { return name; } p