关联[2]

HAS_MANY 关联表示当前模型拥有多个子对象

user数据表中的用户可以发布多条留言,创建了think_content数据表,

其中uid用来关联user中的id

在 WeiBo/Home/Controller/UserController.class.php 中代码为:

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 use Home\Model\UserModel;
 5
 6 class UserController extends Controller {
 7     public function index() {
 8         $user = D(‘User‘);
 9         $arr = $user->relation(true)->select();
10         print_r($arr);
11     }
12  }

在 WeiBo/Home/User/Model/UserModel.class.php 中的代码如下:

 1 <?php
 2 namespace Home\Model;
 3 use Think\Model;
 4 use Think\Model\RelationModel;
 5
 6 class UserModel extends RelationModel {
 7     protected $_link = array(
 8        ‘Content‘=>array(
 9             ‘mapping_type‘=>self::HAS_MANY,
10             ‘mapping_name‘=>‘contents‘,
11             ‘class_name‘=>‘content‘,
12             ‘foreign_key‘ =>‘uid‘,
13             ‘mapping_fields‘=>‘content‘,
14             ‘mapping_limit‘=>‘0,2‘,
15             ‘mapping_order‘=>‘id DESC‘,
16             ),
17     );
18 }

得到的数据为:

后面还有数据未全部显示。

用户表和留言表:BELONGS_TO(多对一)表示 N 条留言从属于某个用户。

新建数据表think_role,用来表示user表中用户的权限:

新建think_group用来连接user和role表,uid用来指代user中的id对应的用户,gid用来指代role表中的权限:

在 WeiBo/Home/Controller/UserController.class.php 中代码为:

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 use Home\Model\UserModel;
 5
 6 class UserController extends Controller {
 7     public function index() {
 8         $user = D(‘User‘);
 9         $arr = $user->relation(true)->select();
10         print_r($arr);
11     }
12  }

在 WeiBo/Home/User/Model/UserModel.class.php 中代码为:

 1 <?php
 2 namespace Home\Model;
 3 use Think\Model;
 4 use Think\Model\RelationModel;
 5
 6 class UserModel extends RelationModel {
 7     protected $_link = array(
 8        ‘Role‘=>array(
 9             ‘mapping_type‘=>self::MANY_TO_MANY,
10             ‘relation_table‘=>‘think_group‘,
11             ‘foreign_key‘ =>‘uid‘,
12              ‘relation_foreign_key‘=>‘gid‘,
13          ),
14     );
15 }

这时得到的数据为:

即两个数据表关联起来了,后面还有三组数据没列出来。

关联也可以向其它数据表的数据进行增删改查,我们使用user和card两个表

user表:

card表

WeiBo/Home/User/Model/UserModel.class.php 中代码进行关联:

 1 namespace Home\Model;
 2 use Think\Model;
 3 use Think\Model\RelationModel;
 4
 5 class UserModel extends RelationModel {
 6     protected $_link = array(
 7        ‘Card‘=>array(
 8             ‘mapping_type‘=>self::HAS_ONE,
 9             ‘foreign_key‘ =>‘uid‘,
10                 ‘mapping_fields‘=>‘code‘,
11                 ),
12     );
13 }

WeiBo/Home/Controller/UserController.class.php 中的代码进行增删改查操作:

 1 <?php
 2 namespace Home\Controller;
 3 use Think\Controller;
 4 use Home\Model\UserModel;
 5
 6 class UserController extends Controller {
 7     public function index() {
 8         $user = D(‘User‘);
 9         $arr = $user->relation(true)->select();
10         print_r($arr);
11     }
12   public function add() {
13         $user=D(‘User‘);
14         $data[‘user‘]=‘测试用户‘;
15         $data[‘email‘]=‘[email protected]‘;
16         $data[‘Card‘]=array(
17             ‘code‘=>‘3209xx‘,
18             );
19         $user->relation(true)->add($data);
20     }
21     public function delete() {
22         $user=D(‘User‘);
23         $user->relation(true)->delete(16);
24     }
25     public function update() {
26         $user=D(‘User‘);
27         $data[‘user‘]=‘测试用户54‘;
28         $data[‘email‘]=‘[email protected]‘;
29         $data[‘Card‘]=array(
30             ‘code‘=>‘3909zz‘,
31             );
32         $user->relation(true)->where(array(‘id‘=>20))->save($data);
33     }
34  }
时间: 2024-10-06 04:40:38

关联[2]的相关文章

Hibernate的七种映射关系之七种关联映射(二)

继续上篇博客 七.Hibernate双向一对多关联映射:让多的一端来维护关系. 主要是解决一对多单向关联的缺陷,而不是需求驱动的. 1.在Student.java实体类里添加Classes引用.private Classes classes; 2.Student.hbm.xml里添加many-to-one标签:<many-to-one name="classes" column="classesid"/>.Classes.hbm.xml在例子(六)里的那

Hibernate的七种映射关系之七种关联映射(一)

关联映射就是将关联关系映射到数据库里,在对象模型中就是一个或多个引用. 一.Hibernate多对一关联映射:就是在"多"的一端加外键,指向"一"的一端. 比如多个学生对应一个班级,多个用户对应一个级别等等,都是多对一关系. 1."多"端实体加入引用"一"端实体的变量及getter,setter方法. 比如说多个学生对应一个班级,在学生实体类加入:private Grade grade; 2."多"端配置文

什么是关联挖掘?如何利用顾客的购物习惯提高销售额?

关联规则挖掘就是从大量的数据中挖掘出有价值描述数据项之间相互联系的有关知识.随着收集和存储在数据库中的数据规模越来越大人们对从这些数据中挖掘相应的关联知识越来越有兴趣.例如从大量的商业交易记录中发现有价值的关联知识就可帮助进行商品目录的设计.交叉营销或帮助进行其它有关的商业决策. 挖掘关联知识的一个典型应用实例就是市场购物分析.根据被放到一个购物袋的购物内容记录数据而发现的不同被购买商品之间所存在的关联知识无疑将会帮助商家分析顾客的购买习惯.如图所示. 发现常在一起被购买的商品关联知识将帮助商家

hibernate一对一关联

hibernate一对一主键关联 一对一主键关联指的是两个表通过主键形成的一对一映射. 数据表要求:A表的主键也是B表的主键同时B表的主键也是A表的外键 sql: create table people( id int primary key auto_increment, name varchar(100) not null, sex varchar(100) not null, age int ) create table idcard( id int primary key, idcard

文件关联

注意:这段代码并不能绕过UAC,测试下来依然会有提示 uses System.IOUtils, Winapi.ShellAPI, Winapi.ShlObj; //RegApp 函数用到的单元 //关联默认程序的函数 procedure RegApp(const aExt, aAppName, aAppPath: string); const nRegFmt = 'Windows Registry Editor Version 5.00' + sLineBreak + '[HKEY_CLASSE

SQL关联操作(查询与更新)

    sql的除了关联查询,还可以关联更新删除等,有时可以一条sql搞定数据移植, 避免写存储过程时. 以下列举了sql的各种级联操作场景.        主表:部门表-dept(dept_id,dname,enum)       从表:员工表-emp (emp_id , ename , sal,dept_id)       //以下是oracle的sql语法  1,关联查询     场景:查询所有员工的部门名称                     2,关联更新     场景:更新部门表的

hibernate关联映射

本文可作为北京尚学堂马士兵hibernate课程的学习笔记. hibernate的映射,主要分为一对一,一对多,多对一,多对多,同时还要单向与双向的区别. OK,不要纠结于名字,我们开始看例子. 一对一单向 老公是一个实体,老婆也是一个实体. 一个老公只有一个老婆,同时一个老婆也只有一个老公. 上面的关系就叫做一对一. 什么叫单向呢. 看代码: package com.bjsxt.hibernate; @Entity public class Husband { private int id;

loadrunner 如何做关联

在页面中为了防止CRSF攻击,每次访问登录页面时,在浏览器器端生成一个token. 在提交时检验这个token是否有效,提交后token自动失效.   如果使用loadrunner来测试此系统话需要做一个关联,把这个token作为一个参数进行提交. 做关联有一下几种方法:   1.通过回放的HTTP VIEW视图.   选择变化的值选择创建关联. 切换到脚本模式. 使用关联 这样关联就可以了.   2.如果用户对脚本比较熟悉的话. 直接写脚本就好了.

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html http://sundensky.blog.163.com/blog/static/7728873420109299167434/ 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系:在Java中此类关系

下载并在Eclipse中关联Android源码

大家都知道文档写的好当然让人很舒服,但是有时候文档再好也不如直接看源码来的直接,既然Android是开源的,为什么不在eclipse里直接看它的源码呢? 1.下载源码 这部分网上有大量的资料,我就不重新写了 2.在eclipse中关联源码 常用eclipse的人对在eclipse中关联源码的操作应该也都很熟悉. 一.找到项目中的android.jar,右键→properties 二.选择External Folder来关联到外部文件夹 三.选择%存放源码的目录%/base/core/java→o