搜尋
首頁後端開發php教程ThinkPHP的關聯模型

ThinkPHP的關聯模型

Jun 07, 2018 pm 05:10 PM
thinkphp

ThinkPHP關聯模型操作實例分析,需要的朋友可以參考下

通常我們所說的關聯關係包括下面三種:
◇ 一對一關聯: ONE_TO_ONE , 包括HAS_ONE 和BELONGS_TO
◇ 一對多關聯: ONE_TO_MANY ,包括HAS_MANY 和BELONGS_TO
◇ 多對多重關聯: MANY_TO_MANY
#關聯定義
資料表的關聯CURD 操作,目前支援的關聯關係包括以下四種:HAS_ONE 、 BELONGS_TO 、 HAS_MANY 、 MANY_TO_MANY 
一個模型根據業務模型的複雜程度可以同時定義多個關聯,不受限制,所有的關聯定義都統一在模型類別的$_link 成員變數裡面定義,並且可以支援動態定義。要支援關聯操作,模型類別必須繼承RelationModel 類,關聯定義的格式是: 

protected $_link = array( 
' 关联 1' => array( 
' 关联属性 1' => ' 定义 ', 
' 关联属性 N' => ' 定义 ', 
), 
' 关联 2' => array( 
' 关联属性 1' => ' 定义 ', 
' 关联属性 N' => ' 定义 ', 
), 
... 
);

HAS_ONE 關聯方式的定義: 

class UserModel extends RelationModel 
{ 
public $_link = array( 
'Profile'=> array( 
'mapping_type' =>HAS_ONE, 
'class_name'=>'Profile', 
// 定义更多的关联属性 
…… 
) , 
); 
}

mapping_type 關聯類型,這個在HAS_ONE 關聯裡面必須使用HAS_ONE常量定義。
class_name 要關聯的模型類別名稱
mapping_name 關聯的對應名稱,用於取得資料以
foreign_key 關聯的外鍵名稱
condition 關聯條件
mapping_fields 關聯要查詢的欄位
as_fields 直接把關聯的欄位值對應成資料物件中的某個欄位
BELONGS_TO 關聯方式的定義: 

'Dept'=> array( 
'mapping_type'=>BELONGS_TO, 
'class_name'=>'Dept', 
'foreign_key'=>'userId', 
'mapping_name'=>'dept', 
// 定义更多的关联属性 
…… 
) ,

class_name 要關聯的模型類別名稱
mapping_name 關聯的對應名稱,用於取得資料以
foreign_key 關聯的外鍵名稱
mapping_fields 關聯要查詢的欄位
condition 關聯條件
parent_key 自引用關聯的關聯欄位
as_fields 直接把關聯的欄位值對應成資料物件中的某個欄位
HAS_MANY 關聯方式的定義: 

'Article'=> array( 
'mapping_type' =>HAS_MANY, 
'class_name'=>'Article', 
'foreign_key'=>'userId', 
'mapping_name'=>'articles', 
'mapping_order'=>'create_time desc', 
// 定义更多的关联属性 
…… 
) ,

class_name 要關聯的模型類別名稱
mapping_name 關聯的對應名稱,用於取得資料以
foreign_key 關聯的外鍵名稱
parent_key 自引用關聯的關聯欄位
condition 關聯條件
mapping_fields 關聯要查詢的欄位
mapping_limit 關聯要傳回的記錄數目
mapping_order 關聯查詢的排序
MANY_TO_MANY關聯方式的定義: 

"Group"=>array( 
'mapping_type'=>MANY_TO_MANY, 
'class_name'=>'Group', 
'mapping_name'=>'groups', 
'foreign_key'=>'userId', 
'relation_foreign_key'=>'goupId', 
'relation_table'=>'think_gourpUser' 
)

class_name 要關聯的模型類別名稱
mapping_name 關聯的對應名稱,用於取得資料以
foreign_key 關聯的外鍵名稱
relation_foreign_key 關聯表的外鍵名稱
mapping_limit 關聯要傳回的記錄數目
mapping_order 關聯查詢的排序
relation_table 多對多重的中間關聯表名稱
關聯查詢
使用relation 方法進行關聯操作, relation 方法不但可以啟用關聯還可以控制局部關聯操作,實現了關聯操作一切盡在掌握之中。

$User = D( "User" ); 
$user = $User->realtion(true)->find(1);

輸出 $user 結果可能是類似下面的資料: 

array( 
'id'=>1, 
'account'=>'ThinkPHP', 
'password'=>'123456', 
'Profile'=> array( 
'email'=>'liu21st@gmail.com', 
'nickname'=>'流年', 
) , 
)

關聯寫入 

$User = D( "User" ); 
$data = array(); 
$data["account"]="ThinkPHP"; 
$data["password"]="123456"; 
$data["Profile"]=array( 
'email'=>'liu21st@gmail.com', 
'nickname' =>' 流年 ', 
) ; 
$result = $User->relation(true)->add($user);

這樣就會自動寫入關聯的 Profile 資料。
關聯更新 

$User = D( "User" ); 
$data["account"]= "ThinkPHP"; 
$data["password"]= "123456"; 
$data["Profile"]=array( 
'email'=>'liu21st@gmail.com', 
'nickname' =>' 流年 ', 
) ; 
$result =$User-> relation(true)->where(‘id=3')->save($data);

關聯刪除

$result =$User->relation(true)->delete( "3" );

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

[ThinkPHP]關聯查詢問題

以上是ThinkPHP的關聯模型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
可以在PHP會話中存儲哪些數據?可以在PHP會話中存儲哪些數據?May 02, 2025 am 12:17 AM

phpsessionscanStorestrings,數字,數組和原始物。

您如何開始PHP會話?您如何開始PHP會話?May 02, 2025 am 12:16 AM

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考慮使用AttActAcks.s.s.4)

什麼是會話再生,如何提高安全性?什麼是會話再生,如何提高安全性?May 02, 2025 am 12:15 AM

會話再生是指在用戶進行敏感操作時生成新會話ID並使舊ID失效,以防會話固定攻擊。實現步驟包括:1.檢測敏感操作,2.生成新會話ID,3.銷毀舊會話ID,4.更新用戶端會話信息。

使用PHP會話時有哪些性能考慮?使用PHP會話時有哪些性能考慮?May 02, 2025 am 12:11 AM

PHP会话对应用性能有显著影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHP會話與Cookie有何不同?PHP會話與Cookie有何不同?May 02, 2025 am 12:03 AM

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版