thinkphp一对多HAS_MANY

关联关系
通常我们所说的关联关系包括下面三种:
一对一关联 :ONE_TO_ONE,包括HAS_ONE 和 BELONGS_TO
一对多关联 :ONE_TO_MANY,包括HAS_MANY 和 BELONGS_TO
多对多关联 :MANY_TO_MANY
关联关系必然有一个参照表,例如:
有一个员工档案管理系统项目,这个项目要包括下面的一些数据表:基本信息表、员工档案表、部门
表、项目组表、银行卡表(用来记录员工的银行卡资料)。
这些数据表之间存在一定的关联关系,我们以员工基本信息表为参照来分析和其他表之间的关联:
每个员工必然有对应的员工档案资料,所以属于HAS_ONE关联;
每个员工必须属于某个部门,所以属于BELONGS_TO关联;
每个员工可以有多个银行卡,但是每张银行卡只可能属于一个员工,因此属于HAS_MANY关联;
每个员工可以同时在多个项目组,每个项目组同时有多个员工,因此属于MANY_TO_MANY关联;
分析清楚数据表之前的关联关系后,我们才可以进行关联定义和关联操作。

对于HAS_MANY举一个小例子如下:

某个商品下有无数个用户评论:

GoodsModel.class.php

<?php
namespace Home\Model;
use Think\Model\RelationModel;
class GoodsModel extends RelationModel{
    protected $_link = array(
        ‘comment‘=>self::HAS_MANY //这是一个常量,声明是一对多关系,并且Relation已经内部集成了Model功能了
    );
}
 ?>

在调用商品详情的时候显示这个商品的用户评论,只需要:

$goods_comment = $goodsModel->relationGet(‘comment‘);

就可以取得所有用户的评论,就是这么简单!

时间: 2024-10-02 11:21:02

thinkphp一对多HAS_MANY的相关文章

ThinkPHP模型中的HAS_ONE,BELONG_TO,HAS_MANY实践

因为很熟悉DJANGO,所以对TP,要慢慢适应. 1,SQL文件 /* Navicat MySQL Data Transfer Source Server : localhost_3306 Source Server Version : 50505 Source Host : localhost:3306 Source Database : thinkphp_inaction Target Server Type : MYSQL Target Server Version : 50505 Fil

ThinkPHP 3.2.3 关联模型的使用

关于关联模型 ThinkPHP 3.2.3 的关联模型(手册地址)一般处理关联数据表的 CURD 操作,例如关联读取.关联写入.关联删除等. 实例 博客管理模块关于博客有 4 张数据表:博客表 crm_blog: CREATE TABLE `crm_blog` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(30) NOT NULL DEFAULT '', `content` text NOT NULL, `tim

thinkphp笔记

thinkphp 笔记TP框架:1.模板引擎2.MVC设计模式3.常用操作类 模板引擎和框架区别:1.模板引擎只是框架中用来做php和html分离的 MVC设计模式:M 数据模型V 视图C 控制器 V(HTML模板) --smarty()--> C(PHP逻辑控制) ->M(Model类表操作) localhost/test/index.php/模块/操作localhost/test/index.php/Index/add 目录结构ThinkPHP.php 框架入口文件Common 框架公共文

ThinkPHP V5.0 正式版发布

ThinkPHP5.0 正式版的发布,是团队中秋节送给PHP开发者最好的礼物!祝大家中秋快乐,事业顺利,用ThinkPHP开发更健康^_^ ThinkPHP5.0版本是一个颠覆和重构版本,官方团队历时十月,倾注了大量的时间和精力,采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持composer,并针对API开发做了大量的优化,包括路由.日志.异常.模型.数据库.模板引擎和验证等模块都已经重构(基础教程qkxue.net),不适合原有3.2项目的升级

thinkphp框架中“关联操作”的完整定义详解

在复杂的关联操作中,如果要给关联定义增加可选的属性,我们可以采用完整定义的方式. 完整定义的格式是: protected $_link = array( '关联表名1'  =>  array( '该表的关联方式的属性1' => '定义', '该表的关联方式的属性N' => '定义', ), '关联表名2'  =>  array( '该表的关联方式的属性1' => '定义', '该表的关联方式的属性N' => '定义', ), ... ); 在上面的格式描述中,对于属性我

thinkphp 关联模型 注意点

这里以商品与商品类别为例 1.表名为goods_type  则模型名为GoodsTypeModel,若模型名不是这,得另外定义   protected $tableName=模型对应主表名 2.模型类必须继承RelationModel 3.三种关联关系 一对一关联 :ONE_TO_ONE,包括HAS_ONE和BELONGS_TO一对多关联 :ONE_TO_MANY,包括HAS_MANY和BELONGS_TO多对多关联 :MANY_TO_MANY ,这个要专门定义一个表来表示两个表间多对多关系 (

ThinkPHP的易忽视点小结

1.使用对象的方法插入数据 D用法. $Form = D('Form'); $data['title'] = 'ThinkPHP'; $data['content'] = '表单内容'; $Form->add($data); 其实thinkphp还支持对象的方式直接向数据库插入数据,如下: $Form = D('Form'); $Form->title = 'ThinkPHP'; $Form->content = '表单内容'; $Form->add(); 2.不指定条件对数据更新

总结ThinkPHP使用技巧经验分享(二)

循环输出volist 还有别名 iterate 模版赋值:$User = D('User')$list = $User->findAll()$this->assign('list',$list) 模版定义:<iterate name="list" id="vo">{$vo.name}</iterate> 注意 name 和 id 表示的含义// 输出 list 的第 5-15 条记录<iterate name="l

数据库分表和分库的原理及基于thinkPHP的实现方法

为什么要分表,分库: 当我们的数据表数据量,访问量很大,或者是使用频繁的时候,一个数据表已经不能承受如此大的数据访问和存储,所以,为了减轻数据库的负担,加快数据的存储,就需要将一张表分成多张,及将一类数据存入不同的几张表,当分表已经不能满足需求是,我们还可以分库,及用几个数据库存储. 分表会随着需求和功能的不同有不同的实现方法,下面是我做项目中的一个例子: 需求:product,product_price两张表是一对多的关系,及产品和产品每日的价格,一个产品对应几种价格,现在由于产品表数据量很大