您好,登錄后才能下訂單哦!
在ThinkPHP中,關聯模型更類似一種mysql中的外鍵約束,但是外鍵約束更加安全,缺點卻是在寫sql語句的時候不方便,ThinkPHP很好得解決了這個問題.但是很多人不動關聯模型的意思.現在就寫個例子.讓大家理解ThinkPHP關聯模型的意思.
環境描述:公司有一個員工表think_user,一個檔案表,think_archives,一個部門表,think_department,和一個銀行卡表.think_cars.
一個員工只有一個檔案表,所以關系就是HSA_ONE,
一個員工只屬于一個部門,但是部門里有多個員工,所以是BELONGS_TO關系
一個員工有多個銀行卡,但是一個銀行卡只能屬于一個員工.所以關系就是HAS_MANY.
先創建需要的表和測試數據
think_user表.
CREATE TABLE `think_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, `did` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
think_department
CREATE TABLE `think_department` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
think_archives
CREATE TABLE `think_archives` ( `id` int(7) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL, `addr` varchar(200) DEFAULT NULL, `email` varchar(30) DEFAULT NULL, `tel` int(13) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
think_cars
CREATE TABLE `think_cars` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `type` varchar(50) DEFAULT NULL, `uid` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
插入數據到部門表think_department
insert into think_cars values (null,'gongxiang','工商卡','1'), (null,'jianshe','建行卡','2'), (null,'jiaohang','交通銀行卡',3);
think_user數據
insert into think_archives values (null,1,'北京','123@163.com','13888888'), (null,2,'上海','111@qq.com','1377777'), (null,3,'重慶','222@qq.com','1344444'), (null,4,'天津','333@qq.com','1111111'), (null,5,'山西','444@qq.com','1322222'), (null,6,'河北','555@qq.com','1333333'), (null,7,'廣州','6666@qq.com','13232323'), (null,8,'廣東','7777@qq.com','121121212'), (null,9,'深證','888@qq.com','1821212');
think_cars數據
insert into think_cars values (null,'gongxiang','工商卡','1'), (null,'jianshe','建行卡','2'), (null,'jiaohang','交通銀行卡',3); Query OK, 3 rows affected (0.01 sec)
think_archives
insert into think_archives values (null,1,'北京','123@163.com','13888888'), (null,2,'上海','111@qq.com','1377777'), (null,3,'重慶','222@qq.com','1344444'), (null,4,'天津','333@qq.com','1111111'), (null,5,'山西','444@qq.com','1322222'), (null,6,'河北','555@qq.com','1333333'), (null,7,'廣州','6666@qq.com','13232323'), (null,8,'廣東','7777@qq.com','121121212'), (null,9,'深證','888@qq.com','1821212');
ok,數據和表創建完了,下面講如何用ThinkPHP的關聯模型去獲取表中數據
現在Model文件夾里創建UserModel.class.php
<?php class UserModel extend RelationModel{}
先做部門和員工之間的關系.員工表的did和部門表的id對應
class UserModel extends RelationModel{ protected $_link=array( 'Department'=>array( 'mapping_type'=>BELONGS_TO, 'class_name'=>'Department', 'mapping_name'=>'Department', 'foreign_key'=>'did', ), ); }
mapping_type是要關聯的模型類名
mapping_name 關聯表的模型名稱
foreign_key 關聯表的外鍵定義
mapping_fields 關聯表要查詢的字段,默認為全部字段
condition 關聯條件
parent_key 自引用關聯字段
as_fields 字段別名定義
2.員工表和檔案表之間的關系
protected $_link=array( 'Archives'=>array( 'mapping_type'=>HAS_ONE, 'class_name'=>'Archives', 'foreign_key'=>'id', 'condition'=>'uid' ), );
3.員工表與銀行卡表之間關系的定義
protected $_link=array( 'Cars'=>array( 'mapping_type'=>HAS_MANY, 'class_name'=>'Cars', 'foreign_key'=>'id', 'condition'=>'uid', ), );
使用方法,在IndexAction.class.php中
class IndexAction extends Action { public function index(){ $user=D('User'); $row=$user->relation(true)->select(); dump($row); } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。