CakePHP框架Model關(guān)聯(lián)對(duì)象用法分析
本文實(shí)例講述了CakePHP框架Model關(guān)聯(lián)對(duì)象。分享給大家供大家參考,具體如下:
CakePHP 提供關(guān)聯(lián)數(shù)據(jù)表間的映射,共有4種類型的關(guān)聯(lián):
hasOne
,hasMany
,belongTo
,hasAndBelongsToMany
.
設(shè)定了Model間的關(guān)聯(lián)關(guān)系定義,CakePHP就會(huì)將基于關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)映射為基于對(duì)象的關(guān)系模型。
但是你應(yīng)該確保遵循CakePHP的命名規(guī)則.
命名規(guī)則中需要考慮的3個(gè)內(nèi)容是,外鍵,model名字,表名.
外鍵:?jiǎn)螖?shù)形式的 modelName_id
表名:復(fù)數(shù)形式的 model名
Model名:駝峰法命名單數(shù)形式(見文件inflector.php).
hasOne 關(guān)聯(lián)的定義與查詢:通過(guò)在model中增加一個(gè)array來(lái)實(shí)現(xiàn).
class User extends AppModel { var $name = 'User'; var $hasOne = array( 'UserInfos' => array( 'className' => 'UserInfos', 'conditions' => '', 'order'=> '', 'dependent' => true, 'foreignKey' => 'user_id' ) ); }
$hasOne 變量是一個(gè)array,CakePHP 通過(guò)該變量來(lái)構(gòu)建 Blog 與 User 之間的關(guān)聯(lián)。
className: 關(guān)聯(lián)對(duì)象的類名。
conditions: 關(guān)聯(lián)對(duì)象的選擇條件。
order: 關(guān)聯(lián)對(duì)象的排列方式。
dependent: 這是個(gè)布爾值,如果為 true,父對(duì)象刪除時(shí)會(huì)級(jí)聯(lián)刪除關(guān)聯(lián)子對(duì)象。
foreignKey: 指向關(guān)聯(lián) Model 的外鍵字段名,僅在不遵循 Cake 的命名約定時(shí)需要設(shè)置。
belongsTo 關(guān)聯(lián)的定義與使用
class Blog extends AppModel { var $name = 'Blog'; var $belongsTo = array( 'User' => array( 'className' => 'User', 'conditions' => '', 'order' => '', 'foreignKey' => 'user_id' ) ); }
className: 關(guān)聯(lián)對(duì)象的類名。
conditions: SQL 條件子句以限定關(guān)聯(lián)的對(duì)象。
order: 關(guān)聯(lián)對(duì)象的排序子句。
foreignKey: 關(guān)聯(lián)對(duì)象所對(duì)應(yīng)的外鍵字段名。
hasMany 關(guān)聯(lián)的定義與查詢
class User extends AppModel { var $name = 'User'; var $hasMany = array( 'Blog' => array( 'className' => 'Blog', 'conditions' => 'Blog.status = 1', 'order' => 'Blog.created DESC', 'limit' => '5', 'foreignKey' => 'user_id', 'dependent' => true, 'exclusive' => false, 'finderQuery' => '' ) ); }
$hasMany array 用來(lái)定義 User 包含多條 Blog 這樣的關(guān)聯(lián)關(guān)系。
className: 關(guān)聯(lián)對(duì)象類名。
conditions: 關(guān)聯(lián)對(duì)象限定條件。
order: 關(guān)聯(lián)對(duì)象排列子句。
limit: 用 limit 來(lái)限定檢索的關(guān)聯(lián)對(duì)象數(shù)量。
foreignKey: 外鍵字段名。
dependent: 是否級(jí)聯(lián)刪除。
exclusive: 如果為 TRUE,所有的關(guān)聯(lián)對(duì)象將在一句 SQL 中刪除,model 的 beforeDelete 回調(diào)函數(shù)不會(huì)被執(zhí)行。
finderQuery: 定義一句完整的 SQL 語(yǔ)句來(lái)檢索關(guān)聯(lián)對(duì)象,能夠?qū)﹃P(guān)聯(lián)規(guī)則進(jìn)行最大程度上的控制。
同樣可以為 Blog 加上關(guān)聯(lián) User 對(duì)象的 belongTo 關(guān)聯(lián)。
hasAndBelongsToMany 關(guān)聯(lián)的定義與查詢。
class Blog extends AppModel { var $name = 'Blog'; var $hasAndBelongsToMany = array('Tag' => array('className' => 'Tag', 'joinTable' => 'blogs_tags', 'foreignKey' => 'blog_id', 'associationForeignKey'=> 'tag_id', 'conditions' => '', 'order' => '', 'limit' => '', 'uniq' => true, 'finderQuery' => '', 'deleteQuery' => '', ) ); }
$hasAndBelongsToMany array 是定義 HABTM 關(guān)聯(lián)的變量。
className: 關(guān)聯(lián)對(duì)象類名。
joinTable: 如果沒有遵循 Cake 的命名約定建立關(guān)聯(lián)表,則需要設(shè)置該 key 來(lái)指定關(guān)聯(lián)表。
foreignKey: 定義本 mode 在關(guān)聯(lián)表中的外鍵字段。
associationForeignKey: 關(guān)聯(lián)表中指向關(guān)聯(lián)對(duì)象的外鍵字段名。
conditions: 關(guān)聯(lián)對(duì)象限定條件。
order: 關(guān)聯(lián)對(duì)象排序子句。
limit: 關(guān)聯(lián)對(duì)象數(shù)量限制。
uniq: 設(shè)為 true 的話,重復(fù)的關(guān)聯(lián)對(duì)象將被過(guò)濾掉。
finderQuery: 完整的關(guān)聯(lián)對(duì)象檢索語(yǔ)句。
deleteQuery: 完整的刪除關(guān)聯(lián)關(guān)系的SQL 語(yǔ)句。
保存關(guān)聯(lián)對(duì)象:
當(dāng)關(guān)聯(lián)的兩個(gè)對(duì)象都沒有持久化,你需要首先持久化主對(duì)象。
在保存子對(duì)象時(shí)要把父對(duì)象的 ID 保持在子對(duì)象中。
保存 hasAndBelongsToMany 關(guān)聯(lián)對(duì)象:
使用 bindModel()
和 unbindModel()
實(shí)時(shí)地改變關(guān)聯(lián)關(guān)系:
更多關(guān)于php框架相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php優(yōu)秀開發(fā)框架總結(jié)》、《codeigniter入門教程》、《ThinkPHP入門教程》、《Zend FrameWork框架入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php 數(shù)據(jù)結(jié)構(gòu)之鏈表隊(duì)列
這篇文章主要介紹了php 數(shù)據(jù)結(jié)構(gòu)之鏈表隊(duì)列的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-10-10Yii2框架數(shù)據(jù)驗(yàn)證操作實(shí)例詳解
這篇文章主要介紹了Yii2框架數(shù)據(jù)驗(yàn)證操作,結(jié)合實(shí)例形式詳細(xì)分析了Yii框架常見數(shù)據(jù)驗(yàn)證操作的原理、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下2018-05-05thinkPHP內(nèi)置字符串截取函數(shù)用法詳解
這篇文章主要介紹了thinkPHP內(nèi)置字符串截取函數(shù)用法,結(jié)合實(shí)例形式分析了thinkPHP內(nèi)置的字符串截取函數(shù)功能與具體使用方法,以及針對(duì)無(wú)法添加省略號(hào)的源碼修改技巧,需要的朋友可以參考下2016-11-11PHP+Ajax異步帶進(jìn)度條上傳文件實(shí)例
這篇文章主要介紹了PHP+Ajax異步帶進(jìn)度條上傳文件實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下。2016-11-11PHP連接和操作MySQL數(shù)據(jù)庫(kù)基礎(chǔ)教程
這篇文章主要介紹了PHP連接和操作MySQL數(shù)據(jù)庫(kù)基礎(chǔ)教程,本文講解了mysql擴(kuò)展、連接數(shù)據(jù)庫(kù)、與數(shù)據(jù)庫(kù)交互等內(nèi)容,需要的朋友可以參考下2014-09-09php curl抓取網(wǎng)頁(yè)的介紹和推廣及使用CURL抓取淘寶頁(yè)面集成方法
抓取網(wǎng)頁(yè)內(nèi)容,分析網(wǎng)頁(yè)數(shù)據(jù)經(jīng)常使用php curl,簡(jiǎn)潔易用,本篇文章通過(guò)代碼實(shí)例給大家講解 php curl抓取網(wǎng)頁(yè)的介紹和推廣及使用CURL抓取淘寶頁(yè)面集成方法,需要的朋友參考下2015-11-11thinkphp視圖模型查詢提示ERR: 1146:Table ''db.pr_order_view'' doesn''
這篇文章主要介紹了thinkphp視圖模型查詢提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解決方法,對(duì)于ThinkPHP初學(xué)者來(lái)說(shuō)有一定的借鑒價(jià)值,需要的朋友可以參考下2014-10-10ci檢測(cè)是ajax還是頁(yè)面post提交數(shù)據(jù)的方法
這篇文章主要介紹了ci檢測(cè)是ajax還是頁(yè)面post提交數(shù)據(jù)的方法,以PHP的環(huán)境變量為基礎(chǔ)實(shí)例展示了針對(duì)CI框架配置文件的修改技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-11-11