搜尋
首頁後端開發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
thinkphp是不是国产框架thinkphp是不是国产框架Sep 26, 2022 pm 05:11 PM

thinkphp是国产框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

一起聊聊thinkphp6使用think-queue实现普通队列和延迟队列一起聊聊thinkphp6使用think-queue实现普通队列和延迟队列Apr 20, 2022 pm 01:07 PM

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

thinkphp的mvc分别指什么thinkphp的mvc分别指什么Jun 21, 2022 am 11:11 AM

thinkphp基于的mvc分别是指:1、m是model的缩写,表示模型,用于数据处理;2、v是view的缩写,表示视图,由View类和模板文件组成;3、c是controller的缩写,表示控制器,用于逻辑处理。mvc设计模式是一种编程思想,是一种将应用程序的逻辑层和表现层进行分离的方法。

thinkphp 怎么查询库是否存在thinkphp 怎么查询库是否存在Dec 05, 2022 am 09:40 AM

thinkphp查询库是否存在的方法:1、打开相应的tp文件;2、通过“ $isTable=db()->query('SHOW TABLES LIKE '."'".$data['table_name']."'");if($isTable){...}else{...}”方式验证表是否存在即可。

实例详解thinkphp6使用jwt认证实例详解thinkphp6使用jwt认证Jun 24, 2022 pm 12:57 PM

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了使用jwt认证的问题,下面一起来看一下,希望对大家有帮助。

一文教你ThinkPHP使用think-queue实现redis消息队列一文教你ThinkPHP使用think-queue实现redis消息队列Jun 28, 2022 pm 03:33 PM

本篇文章给大家带来了关于ThinkPHP的相关知识,其中主要整理了使用think-queue实现redis消息队列的相关问题,下面一起来看一下,希望对大家有帮助。

thinkphp扩展插件有哪些thinkphp扩展插件有哪些Jun 13, 2022 pm 05:45 PM

thinkphp扩展有:1、think-migration,是一种数据库迁移工具;2、think-orm,是一种ORM类库扩展;3、think-oracle,是一种Oracle驱动扩展;4、think-mongo,一种MongoDb扩展;5、think-soar,一种SQL语句优化扩展;6、porter,一种数据库管理工具;7、tp-jwt-auth,一个jwt身份验证扩展包。

thinkphp怎么设置伪静态去除目录thinkphp怎么设置伪静态去除目录Dec 05, 2022 am 09:35 AM

thinkphp设置伪静态去除目录的方法:1、在httpd.conf配置文件中加载mod_rewrite.so模块;2、将httpd.conf中Allowoverride None的None改为All;3、修改对应的项目配置文件;4、在项目的根目录下面建立一个.htaccess文件即可。

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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具