ThinkPHP關聯模型詳解

2021-09-03 08:30:30 字數 3963 閱讀 4663

在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,'北京','[email protected]','13888888'),

(null,2,'上海','[email protected]','1377777'),

(null,3,'重慶','[email protected]','1344444'),

(null,4,'天津','[email protected]','1111111'),

(null,5,'山西','[email protected]','1322222'),

(null,6,'河北','[email protected]','1333333'),

(null,7,'廣州','[email protected]','13232323'),

(null,8,'廣東','[email protected]','121121212'),

(null,9,'深證','[email protected]','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,'北京','[email protected]','13888888'),

(null,2,'上海','[email protected]','1377777'),

(null,3,'重慶','[email protected]','1344444'),

(null,4,'天津','[email protected]','1111111'),

(null,5,'山西','[email protected]','1322222'),

(null,6,'河北','[email protected]','1333333'),

(null,7,'廣州','[email protected]','13232323'),

(null,8,'廣東','[email protected]','121121212'),

(null,9,'深證','[email protected]','1821212');

ok,資料和表建立完了,下面講如何用thinkphp的關聯模型去獲取表中資料

現在model資料夾裡建立usermodel.class.php

<?php 

class usermodel extend relationmodel{}

先做部門和員工之間的關係.員工表的did和部門表的id對應

class usermodel extends relationmodel
foreign_key   關聯表的外來鍵定義

condition   關聯條件

parent_key 自引用關聯字段

as_fields   字段別名定義

2.員工表和檔案表之間的關係

protected $_link=array(

'archives'=>array(

'class_name'=>'archives',

'foreign_key'=>'id',

'condition'=>'uid'

),);

3.員工表與銀行卡表之間關係的定義

protected $_link=array(

'cars'=>array(

'class_name'=>'cars',

'foreign_key'=>'id',

'condition'=>'uid',

),);

使用方法,在indexaction.class.php中

ThinkPHP關聯模型詳解

在thinkphp中,關聯模型更類似一種mysql中的外來鍵約束,但是外來鍵約束更加安全,缺點卻是在寫sql語句的時候不方便,thinkphp很好得解決了這個問題.但是很多人不動關聯模型的意思.現在就寫個例子.讓大家理解thinkphp關聯模型的意思.環境描述 公司有乙個員工表think user,...

thinkphp 模型關聯預載入和模型關聯統計

use think model class usermodel extends model public function getall public function getstatusattr value use think model class employeesmodel extends ...

關於thinkphp關聯模型的HAS ONE

距離第一次學習thinkphp有一年多了,也算是認識它和使用它一年多了吧,但是發現我對thinkphp還是有些不熟悉的地方,特別是模型。最近開發二手房專案,裡面用到模型,然後資料庫是沿用之前的,框架轉為thinkphp,之前一直自己設計資料庫,所以模型可以做的和官方一樣,但是這次因為資料庫不便於改動...