ThinkPHP關(guān)聯(lián)模型操作實例分析
更新時間:2012年09月23日 23:49:07 作者:
ThinkPHP關(guān)聯(lián)模型操作實例分析,需要的朋友可以參考下
通常我們所說的關(guān)聯(lián)關(guān)系包括下面三種:
◇ 一對一關(guān)聯(lián) : ONE_TO_ONE , 包括 HAS_ONE 和 BELONGS_TO
◇ 一對多關(guān)聯(lián) : ONE_TO_MANY , 包括 HAS_MANY 和 BELONGS_TO
◇ 多對多關(guān)聯(lián) : MANY_TO_MANY
關(guān)聯(lián)定義
數(shù)據(jù)表的關(guān)聯(lián) CURD 操作,目前支持的關(guān)聯(lián)關(guān)系包括下面四種:HAS_ONE 、 BELONGS_TO 、 HAS_MANY 、 MANY_TO_MANY 。
一個模型根據(jù)業(yè)務(wù)模型的復(fù)雜程度可以同時定義多個關(guān)聯(lián),不受限制,所有的關(guān)聯(lián)定義都統(tǒng)一在模型類的 $_link 成員變量里面定義,并且可以支持動態(tài)定義。要支持關(guān)聯(lián)操作,模型類必須繼承 RelationModel 類,關(guān)聯(lián)定義的格式是:
protected $_link = array(
' 關(guān)聯(lián) 1' => array(
' 關(guān)聯(lián)屬性 1' => ' 定義 ',
' 關(guān)聯(lián)屬性 N' => ' 定義 ',
),
' 關(guān)聯(lián) 2' => array(
' 關(guān)聯(lián)屬性 1' => ' 定義 ',
' 關(guān)聯(lián)屬性 N' => ' 定義 ',
),
...
);
HAS_ONE 關(guān)聯(lián)方式的定義:
class UserModel extends RelationModel
{
public $_link = array(
'Profile'=> array(
'mapping_type' =>HAS_ONE,
'class_name'=>'Profile',
// 定義更多的關(guān)聯(lián)屬性
……
) ,
);
}
mapping_type 關(guān)聯(lián)類型,這個在 HAS_ONE 關(guān)聯(lián)里面必須使用 HAS_ONE 常量定義。
class_name 要關(guān)聯(lián)的模型類名
mapping_name 關(guān)聯(lián)的映射名稱,用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱
condition 關(guān)聯(lián)條件
mapping_fields 關(guān)聯(lián)要查詢的字段
as_fields 直接把關(guān)聯(lián)的字段值映射成數(shù)據(jù)對象中的某個字段
BELONGS_TO 關(guān)聯(lián)方式的定義:
'Dept'=> array(
'mapping_type'=>BELONGS_TO,
'class_name'=>'Dept',
'foreign_key'=>'userId',
'mapping_name'=>'dept',
// 定義更多的關(guān)聯(lián)屬性
……
) ,
class_name 要關(guān)聯(lián)的模型類名
mapping_name 關(guān)聯(lián)的映射名稱,用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱
mapping_fields 關(guān)聯(lián)要查詢的字段
condition 關(guān)聯(lián)條件
parent_key 自引用關(guān)聯(lián)的關(guān)聯(lián)字段
as_fields 直接把關(guān)聯(lián)的字段值映射成數(shù)據(jù)對象中的某個字段
HAS_MANY 關(guān)聯(lián)方式的定義:
'Article'=> array(
'mapping_type' =>HAS_MANY,
'class_name'=>'Article',
'foreign_key'=>'userId',
'mapping_name'=>'articles',
'mapping_order'=>'create_time desc',
// 定義更多的關(guān)聯(lián)屬性
……
) ,
class_name 要關(guān)聯(lián)的模型類名
mapping_name 關(guān)聯(lián)的映射名稱,用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱
parent_key 自引用關(guān)聯(lián)的關(guān)聯(lián)字段
condition 關(guān)聯(lián)條件
mapping_fields 關(guān)聯(lián)要查詢的字段
mapping_limit 關(guān)聯(lián)要返回的記錄數(shù)目
mapping_order 關(guān)聯(lián)查詢的排序
MANY_TO_MANY 關(guān)聯(lián)方式的定義:
"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 要關(guān)聯(lián)的模型類名
mapping_name 關(guān)聯(lián)的映射名稱,用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱
relation_foreign_key 關(guān)聯(lián)表的外鍵名稱
mapping_limit 關(guān)聯(lián)要返回的記錄數(shù)目
mapping_order 關(guān)聯(lián)查詢的排序
relation_table 多對多的中間關(guān)聯(lián)表名稱
關(guān)聯(lián)查詢
使用 relation 方法進行關(guān)聯(lián)操作, relation 方法不但可以啟用關(guān)聯(lián)還可以控制局部關(guān)聯(lián)操作,實現(xiàn)了關(guān)聯(lián)操作一切盡在掌握之中。
$User = D( "User" );
$user = $User->realtion(true)->find(1);
輸出 $user 結(jié)果可能是類似于下面的數(shù)據(jù):
array(
'id'=>1,
'account'=>'ThinkPHP',
'password'=>'123456',
'Profile'=> array(
'email'=>'liu21st@gmail.com',
'nickname'=>'流年',
) ,
)
關(guān)聯(lián)寫入
$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);
這樣就會自動寫入關(guān)聯(lián)的 Profile 數(shù)據(jù)。
關(guān)聯(lián)更新
$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);
關(guān)聯(lián)刪除
$result =$User->relation(true)->delete( "3" );
◇ 一對一關(guān)聯(lián) : ONE_TO_ONE , 包括 HAS_ONE 和 BELONGS_TO
◇ 一對多關(guān)聯(lián) : ONE_TO_MANY , 包括 HAS_MANY 和 BELONGS_TO
◇ 多對多關(guān)聯(lián) : MANY_TO_MANY
關(guān)聯(lián)定義
數(shù)據(jù)表的關(guān)聯(lián) CURD 操作,目前支持的關(guān)聯(lián)關(guān)系包括下面四種:HAS_ONE 、 BELONGS_TO 、 HAS_MANY 、 MANY_TO_MANY 。
一個模型根據(jù)業(yè)務(wù)模型的復(fù)雜程度可以同時定義多個關(guān)聯(lián),不受限制,所有的關(guān)聯(lián)定義都統(tǒng)一在模型類的 $_link 成員變量里面定義,并且可以支持動態(tài)定義。要支持關(guān)聯(lián)操作,模型類必須繼承 RelationModel 類,關(guān)聯(lián)定義的格式是:
復(fù)制代碼 代碼如下:
protected $_link = array(
' 關(guān)聯(lián) 1' => array(
' 關(guān)聯(lián)屬性 1' => ' 定義 ',
' 關(guān)聯(lián)屬性 N' => ' 定義 ',
),
' 關(guān)聯(lián) 2' => array(
' 關(guān)聯(lián)屬性 1' => ' 定義 ',
' 關(guān)聯(lián)屬性 N' => ' 定義 ',
),
...
);
HAS_ONE 關(guān)聯(lián)方式的定義:
復(fù)制代碼 代碼如下:
class UserModel extends RelationModel
{
public $_link = array(
'Profile'=> array(
'mapping_type' =>HAS_ONE,
'class_name'=>'Profile',
// 定義更多的關(guān)聯(lián)屬性
……
) ,
);
}
mapping_type 關(guān)聯(lián)類型,這個在 HAS_ONE 關(guān)聯(lián)里面必須使用 HAS_ONE 常量定義。
class_name 要關(guān)聯(lián)的模型類名
mapping_name 關(guān)聯(lián)的映射名稱,用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱
condition 關(guān)聯(lián)條件
mapping_fields 關(guān)聯(lián)要查詢的字段
as_fields 直接把關(guān)聯(lián)的字段值映射成數(shù)據(jù)對象中的某個字段
BELONGS_TO 關(guān)聯(lián)方式的定義:
復(fù)制代碼 代碼如下:
'Dept'=> array(
'mapping_type'=>BELONGS_TO,
'class_name'=>'Dept',
'foreign_key'=>'userId',
'mapping_name'=>'dept',
// 定義更多的關(guān)聯(lián)屬性
……
) ,
class_name 要關(guān)聯(lián)的模型類名
mapping_name 關(guān)聯(lián)的映射名稱,用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱
mapping_fields 關(guān)聯(lián)要查詢的字段
condition 關(guān)聯(lián)條件
parent_key 自引用關(guān)聯(lián)的關(guān)聯(lián)字段
as_fields 直接把關(guān)聯(lián)的字段值映射成數(shù)據(jù)對象中的某個字段
HAS_MANY 關(guān)聯(lián)方式的定義:
復(fù)制代碼 代碼如下:
'Article'=> array(
'mapping_type' =>HAS_MANY,
'class_name'=>'Article',
'foreign_key'=>'userId',
'mapping_name'=>'articles',
'mapping_order'=>'create_time desc',
// 定義更多的關(guān)聯(lián)屬性
……
) ,
class_name 要關(guān)聯(lián)的模型類名
mapping_name 關(guān)聯(lián)的映射名稱,用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱
parent_key 自引用關(guān)聯(lián)的關(guān)聯(lián)字段
condition 關(guān)聯(lián)條件
mapping_fields 關(guān)聯(lián)要查詢的字段
mapping_limit 關(guān)聯(lián)要返回的記錄數(shù)目
mapping_order 關(guān)聯(lián)查詢的排序
MANY_TO_MANY 關(guān)聯(lián)方式的定義:
復(fù)制代碼 代碼如下:
"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 要關(guān)聯(lián)的模型類名
mapping_name 關(guān)聯(lián)的映射名稱,用于獲取數(shù)據(jù)用
foreign_key 關(guān)聯(lián)的外鍵名稱
relation_foreign_key 關(guān)聯(lián)表的外鍵名稱
mapping_limit 關(guān)聯(lián)要返回的記錄數(shù)目
mapping_order 關(guān)聯(lián)查詢的排序
relation_table 多對多的中間關(guān)聯(lián)表名稱
關(guān)聯(lián)查詢
使用 relation 方法進行關(guān)聯(lián)操作, relation 方法不但可以啟用關(guān)聯(lián)還可以控制局部關(guān)聯(lián)操作,實現(xiàn)了關(guān)聯(lián)操作一切盡在掌握之中。
$User = D( "User" );
$user = $User->realtion(true)->find(1);
輸出 $user 結(jié)果可能是類似于下面的數(shù)據(jù):
復(fù)制代碼 代碼如下:
array(
'id'=>1,
'account'=>'ThinkPHP',
'password'=>'123456',
'Profile'=> array(
'email'=>'liu21st@gmail.com',
'nickname'=>'流年',
) ,
)
關(guān)聯(lián)寫入
復(fù)制代碼 代碼如下:
$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);
這樣就會自動寫入關(guān)聯(lián)的 Profile 數(shù)據(jù)。
關(guān)聯(lián)更新
復(fù)制代碼 代碼如下:
$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);
關(guān)聯(lián)刪除
$result =$User->relation(true)->delete( "3" );
您可能感興趣的文章:
- Thinkphp5.0 框架使用模型Model添加、更新、刪除數(shù)據(jù)操作詳解
- Thinkphp5.0 框架Model模型簡單用法分析
- ThinkPHP5&5.1框架關(guān)聯(lián)模型分頁操作示例
- ThinkPHP實例化模型的四種方法概述
- ThinkPHP模型詳解
- thinkPHP模型初始化實例分析
- 淺談thinkphp的實例化模型
- thinkphp利用模型通用數(shù)據(jù)編輯添加和刪除的實例代碼
- thinkphp3.x自定義Action、Model及View的簡單實現(xiàn)方法
- ThinkPHP中實例Model方法的區(qū)別說明
- Thinkphp5.0框架使用模型Model的獲取器、修改器、軟刪除數(shù)據(jù)操作示例
相關(guān)文章
需要使用php模板的朋友必看的很多個頂級PHP模板引擎比較分析
最近學(xué)習php模板技術(shù),找到一篇不錯的關(guān)于php模板的分析為了找到一個好的模板引擎,我在互聯(lián)網(wǎng)上進行搜索,目前已經(jīng)整理出了以下名單2008-05-05ThinkPHP關(guān)聯(lián)模型操作實例分析
ThinkPHP關(guān)聯(lián)模型操作實例分析,需要的朋友可以參考下2012-09-09php smarty截取中文字符亂碼問題?gb2312/utf-8
一般網(wǎng)站頁面的顯示都不可避免的會涉及子字符串的截取,這個時候truncate就派上用場了,但是它只適合英文用戶,對與中文用戶來說,使用 truncate會出現(xiàn)亂碼2011-11-11