《PHP應(yīng)用:CakePHP框架Model關(guān)聯(lián)對象用法分析》要點:
本文介紹了PHP應(yīng)用:CakePHP框架Model關(guān)聯(lián)對象用法分析,希望對您有用。如果有疑問,可以聯(lián)系我們。
PHP學(xué)習(xí)本文實例講述了CakePHP框架Model關(guān)聯(lián)對象.分享給大家供大家參考,具體如下:
PHP學(xué)習(xí)CakePHP 提供關(guān)聯(lián)數(shù)據(jù)表間的映射,共有4種類型的關(guān)聯(lián):
PHP學(xué)習(xí)hasOne
,hasMany
,belongTo
,hasAndBelongsToMany
.
PHP學(xué)習(xí)設(shè)定了Model間的關(guān)聯(lián)關(guān)系定義,CakePHP就會將基于關(guān)系數(shù)據(jù)庫的數(shù)據(jù)映射為基于對象的關(guān)系模型.
PHP學(xué)習(xí)但是你應(yīng)該確保遵循CakePHP的命名規(guī)則.
PHP學(xué)習(xí)命名規(guī)則中需要考慮的3個內(nèi)容是,外鍵,model名字,表名.
PHP學(xué)習(xí)外鍵:單數(shù)形式的 modelName_id
表名:復(fù)數(shù)形式的 model名
Model名:駝峰法命名單數(shù)形式(見文件inflector.php).
PHP學(xué)習(xí)hasOne 關(guān)聯(lián)的定義與查詢:通過在model中增加一個array來實現(xiàn).
PHP學(xué)習(xí)
class User extends AppModel
{
var $name = 'User';
var $hasOne = array(
'UserInfos' => array(
'className' => 'UserInfos',
'conditions' => '',
'order'=> '',
'dependent' => true,
'foreignKey' => 'user_id'
)
);
}
PHP學(xué)習(xí)$hasOne 變量是一個array,CakePHP 通過該變量來構(gòu)建 Blog 與 User 之間的關(guān)聯(lián).
PHP學(xué)習(xí)className: 關(guān)聯(lián)對象的類名.
conditions: 關(guān)聯(lián)對象的選擇條件.
order: 關(guān)聯(lián)對象的排列方式.
dependent: 這是個布爾值,如果為 true,父對象刪除時會級聯(lián)刪除關(guān)聯(lián)子對象.
foreignKey: 指向關(guān)聯(lián) Model 的外鍵字段名,僅在不遵循 Cake 的命名約定時需要設(shè)置.
PHP學(xué)習(xí)belongsTo 關(guān)聯(lián)的定義與使用
PHP學(xué)習(xí)
class Blog extends AppModel
{
var $name = 'Blog';
var $belongsTo = array(
'User' => array(
'className' => 'User',
'conditions' => '',
'order' => '',
'foreignKey' => 'user_id'
)
);
}
PHP學(xué)習(xí)className: 關(guān)聯(lián)對象的類名.
conditions: SQL 條件子句以限定關(guān)聯(lián)的對象.
order: 關(guān)聯(lián)對象的排序子句.
foreignKey: 關(guān)聯(lián)對象所對應(yīng)的外鍵字段名.
PHP學(xué)習(xí)hasMany 關(guān)聯(lián)的定義與查詢
PHP學(xué)習(xí)
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' => ''
)
);
}
PHP學(xué)習(xí)$hasMany array 用來定義 User 包含多條 Blog 這樣的關(guān)聯(lián)關(guān)系.
PHP學(xué)習(xí)className: 關(guān)聯(lián)對象類名.
conditions: 關(guān)聯(lián)對象限定條件.
order: 關(guān)聯(lián)對象排列子句.
PHP學(xué)習(xí)limit: 用 limit 來限定檢索的關(guān)聯(lián)對象數(shù)量.
PHP學(xué)習(xí)foreignKey: 外鍵字段名.
dependent: 是否級聯(lián)刪除.
exclusive: 如果為 TRUE,所有的關(guān)聯(lián)對象將在一句 SQL 中刪除,model 的 beforeDelete 回調(diào)函數(shù)不會被執(zhí)行.
finderQuery: 定義一句完整的 SQL 語句來檢索關(guān)聯(lián)對象,能夠?qū)﹃P(guān)聯(lián)規(guī)則進(jìn)行最大程度上的控制.
PHP學(xué)習(xí)同樣可以為 Blog 加上關(guān)聯(lián) User 對象的 belongTo 關(guān)聯(lián).
PHP學(xué)習(xí)hasAndBelongsToMany 關(guān)聯(lián)的定義與查詢.
PHP學(xué)習(xí)
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' => '',
)
);
}
PHP學(xué)習(xí)$hasAndBelongsToMany array 是定義 HABTM 關(guān)聯(lián)的變量.
PHP學(xué)習(xí)className: 關(guān)聯(lián)對象類名.
joinTable: 如果沒有遵循 Cake 的命名約定建立關(guān)聯(lián)表,則需要設(shè)置該 key 來指定關(guān)聯(lián)表.
foreignKey: 定義本 mode 在關(guān)聯(lián)表中的外鍵字段.
associationForeignKey: 關(guān)聯(lián)表中指向關(guān)聯(lián)對象的外鍵字段名.
conditions:? 關(guān)聯(lián)對象限定條件.
order: 關(guān)聯(lián)對象排序子句.
limit: 關(guān)聯(lián)對象數(shù)量限制.
uniq: 設(shè)為 true 的話,重復(fù)的關(guān)聯(lián)對象將被過濾掉.
finderQuery: 完整的關(guān)聯(lián)對象檢索語句.
deleteQuery: 完整的刪除關(guān)聯(lián)關(guān)系的SQL 語句.
PHP學(xué)習(xí)保存關(guān)聯(lián)對象:
PHP學(xué)習(xí)當(dāng)關(guān)聯(lián)的兩個對象都沒有持久化,你需要首先持久化主對象.
PHP學(xué)習(xí)在保存子對象時要把父對象的 ID 保持在子對象中.
PHP學(xué)習(xí)保存 hasAndBelongsToMany 關(guān)聯(lián)對象:
PHP學(xué)習(xí)使用 bindModel()
和 unbindModel()
實時地改變關(guān)聯(lián)關(guān)系:
PHP學(xué)習(xí)更多關(guān)于php框架相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php優(yōu)秀開發(fā)框架總結(jié)》、《codeigniter入門教程》、《ThinkPHP入門教程》、《Zend FrameWork框架入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
PHP學(xué)習(xí)希望本文所述對大家PHP程序設(shè)計有所幫助.
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/372.html