在ThinkPHP中,关联模型更类似一种mysql中的外键约束,但是外键约束更加安全,缺点却是在写sql语句的时候不方便,ThinkPHP很好得解决了这个问题.但是很多人不动关联模型的意思.现在就写个例子.让大家理解ThinkPHP关联模型的意思.
环境描述:公司有一个员工表think_user,一个档案表,think_archives,一个部门表,think_department,和一个银行卡表.think_cars.
一个员工只有一个档案表,所以关系就是HSA_ONE,
一个员工只属于一个部门,但是部门里有多个员工,所以是BELONGS_TO关系
一个员工有多个银行卡,但是一个银行卡只能属于一个员工.所以关系就是HAS_MANY.
先创建需要的表和测试数据
think_user表.
1
2
3
4
5
6
7
<code>CREATE</code> <code>TABLE</code> <code>`think_user` (</code>
<code> </code><code>`id` </code><code>int</code><code>(11) </code><code>NOT</code> <code>NULL</code> <code>AUTO_INCREMENT,</code>
<code> </code><code>`username` </code><code>varchar</code><code>(50) </code><code>NOT</code> <code>NULL</code><code>,</code>
<code> </code><code>`</code><code>password</code><code>` </code><code>varchar</code><code>(50) </code><code>NOT</code> <code>NULL</code><code>,</code>
<code> </code><code>`did` </code><code>int</code><code>(11) </code><code>NOT</code> <code>NULL</code><code>,</code>
<code> </code><code>PRIMARY</code> <code>KEY</code> <code>(`id`)</code>
<code>) ENGINE=InnoDB </code><code>DEFAULT</code> <code>CHARSET=utf8 |</code>
think_department
<code> </code><code>CREATE</code> <code>TABLE</code> <code>`think_department` (</code>
<code> </code><code>`</code><code>name</code><code>` </code><code>varchar</code><code>(50) </code><code>DEFAULT</code> <code>NULL</code><code>,</code>
think_archives
8
<code>CREATE</code> <code>TABLE</code> <code>`think_archives` (</code>
<code> </code><code>`id` </code><code>int</code><code>(7) </code><code>NOT</code> <code>NULL</code> <code>AUTO_INCREMENT,</code>
<code> </code><code>`uid` </code><code>int</code><code>(11) </code><code>NOT</code> <code>NULL</code><code>,</code>
<code> </code><code>`addr` </code><code>varchar</code><code>(200) </code><code>DEFAULT</code> <code>NULL</code><code>,</code>
<code> </code><code>`email` </code><code>varchar</code><code>(30) </code><code>DEFAULT</code> <code>NULL</code><code>,</code>
<code> </code><code>`tel` </code><code>int</code><code>(13) </code><code>DEFAULT</code> <code>NULL</code><code>,</code>
think_cars
<code>CREATE</code> <code>TABLE</code> <code>`think_cars` (</code>
<code> </code><code>`type` </code><code>varchar</code><code>(50) </code><code>DEFAULT</code> <code>NULL</code><code>,</code>
<code> </code><code>`uid` </code><code>int</code><code>(11) </code><code>DEFAULT</code> <code>NULL</code><code>,</code>
<code>) ENGINE=InnoDB </code><code>DEFAULT</code> <code>CHARSET=utf8</code>
插入数据到部门表think_department
<code>insert</code> <code>into</code> <code>think_cars </code><code>values</code>
<code> </code><code>(</code><code>null</code><code>,</code><code>'gongxiang'</code><code>,</code><code>'工商卡'</code><code>,</code><code>'1'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,</code><code>'jianshe'</code><code>,</code><code>'建行卡'</code><code>,</code><code>'2'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,</code><code>'jiaohang'</code><code>,</code><code>'交通银行卡'</code><code>,3);</code>
think_user数据
9
10
<code>insert</code> <code>into</code> <code>think_archives </code><code>values</code>
<code> </code><code>(</code><code>null</code><code>,1,</code><code>'北京'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'13888888'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,2,</code><code>'上海'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'1377777'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,3,</code><code>'重庆'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'1344444'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,4,</code><code>'天津'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'1111111'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,5,</code><code>'山西'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'1322222'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,6,</code><code>'河北'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'1333333'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,7,</code><code>'广州'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'13232323'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,8,</code><code>'广东'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'121121212'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,9,</code><code>'深证'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'1821212'</code><code>);</code>
think_cars数据
<code> </code><code>(</code><code>null</code><code>,</code><code>'jianshe'</code><code>,</code><code>'建行卡'</code><code>,</code><code>'2'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,</code><code>'jiaohang'</code><code>,</code><code>'交通银行卡'</code><code>,3);</code>
<code>Query OK, 3 </code><code>rows</code> <code>affected (0.01 sec)</code>
think_archives
<code> </code><code>(</code><code>null</code><code>,2,</code><code>'上海'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'1377777'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,5,</code><code>'山西'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'1322222'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,6,</code><code>'河北'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'1333333'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,8,</code><code>'广东'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'121121212'</code><code>),</code>
<code> </code><code>(</code><code>null</code><code>,9,</code><code>'深证'</code><code>,</code><code>'[email protected]'</code><code>,</code><code>'1821212'</code><code>);</code>
ok,数据和表创建完了,下面讲如何用ThinkPHP的关联模型去获取表中数据
现在Model文件夹里创建UserModel.class.php
<code><?php</code>
<code>class</code> <code>UserModel extend RelationModel{}</code>
先做部门和员工之间的关系.员工表的did和部门表的id对应
<code>class</code> <code>UserModel </code><code>extends</code> <code>RelationModel{</code>
<code> </code><code>protected</code> <code>$_link</code><code>=</code><code>array</code><code>(</code>
<code> </code><code>'Department'</code><code>=></code><code>array</code><code>(</code>
<code> </code><code>'mapping_type'</code><code>=>BELONGS_TO,</code>
<code> </code><code>'class_name'</code><code>=></code><code>'Department'</code><code>,</code>
<code> </code><code>'mapping_name'</code><code>=></code><code>'Department'</code><code>,</code>
<code> </code><code>'foreign_key'</code><code>=></code><code>'did'</code><code>,</code>
<code> </code><code>),</code>
<code> </code><code>);</code>
<code>}</code>
mapping_type是要关联的模型类名
mapping_name 关联表的模型名称
foreign_key 关联表的外键定义
mapping_fields 关联表要查询的字段,默认为全部字段
condition 关联条件
parent_key 自引用关联字段
as_fields 字段别名定义
2.员工表和档案表之间的关系
<code>protected</code> <code>$_link</code><code>=</code><code>array</code><code>(</code>
<code> </code><code>'Archives'</code><code>=></code><code>array</code><code>(</code>
<code> </code><code>'mapping_type'</code><code>=>HAS_ONE,</code>
<code> </code><code>'class_name'</code><code>=></code><code>'Archives'</code><code>,</code>
<code> </code><code>'foreign_key'</code><code>=></code><code>'id'</code><code>,</code>
<code> </code><code>'condition'</code><code>=></code><code>'uid'</code>
<code> </code><code>),</code>
<code> </code><code>);</code>
3.员工表与银行卡表之间关系的定义
<code> </code><code>'Cars'</code><code>=></code><code>array</code><code>(</code>
<code> </code><code>'mapping_type'</code><code>=>HAS_MANY,</code>
<code> </code><code>'class_name'</code><code>=></code><code>'Cars'</code><code>,</code>
<code> </code><code>'foreign_key'</code><code>=></code><code>'id'</code><code>,</code>
<code> </code><code>'condition'</code><code>=></code><code>'uid'</code><code>,</code>
使用方法,在IndexAction.class.php中
<code>class</code> <code>IndexAction </code><code>extends</code> <code>Action {</code>
<code> </code><code>public</code> <code>function</code> <code>index(){</code>
<code> </code><code>$user</code><code>=D(</code><code>'User'</code><code>);</code>
<code> </code><code>$row</code><code>=</code><code>$user</code><code>->relation(true)->select();</code>
<code> </code><code>dump(</code><code>$row</code><code>);</code>
<code> </code><code>}</code>
本文转自 3147972 51CTO博客,原文链接:http://blog.51cto.com/a3147972/1419856,如需转载请自行联系原作者