热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

thinkphp3.2.3关联模型(多对多)

看了thinkphp的完全开发手册上的关联模型,其实我看的不太懂,做起来的时候,就有好多错误,比如说xxx表不存在ÿ

看了thinkphp的完全开发手册上的关联模型,其实我看的不太懂,做起来的时候,就有好多错误,比如说xxx表不存在,没有relation方法等等。后来查了好多资料,发现都是代码前头一些命名空间漏了写,或者是表名没写对(所以表名要写好,不然是给自己挖坑。。。)又或者模型的名字没写对。
下面给大家写一下完整的代码,我测试出来是没有问题的哦。仅供参考

这里需要用到三张表(因为是多对多关系,所以还需要一个中间表),比如我有文章表easay,属性表attr,属性就是说这篇文章可以是“置顶”属性,“推荐”属性等等,他们之间是多对多的关系。中间表的属性就是他们两个表的主键id,在这里取名为easay_attr
文章表easay

attr表,属性表

中间表easay_attr

关联模型名称
EasayModel.class.php


namespace Home\model;
use Think\Model;
use Think\Model\RelationModel;
Class EasayModel extends RelationModel{protected $_link=array('attr'=>array(//这里的attr就是要被连接的表的名称'mapping_type'=>self::MANY_TO_MANY,//关联模型,记住!'self::MANY_TO_MANY'是错的,不要加引号!!!'relation_type'=>easay_attr,//这里是中间表,如果有前缀的表,要全部写上。我这个表是没有前缀,所以没写。'foreign_key'=>'id',//用中间表关联easay表的id,如果不写,那就默认是(表名_id)'relaton_foreign_key'=>'attr_id',//同理,用中间表关联attr表的id,如果不写,那就默认是(表名_id)
)
);
}
?>

模型写到这里,就写完了,下面是控制器方法


namespace Home\Controller;
use Think\Controller;
class indexController extends Controller{Public function index(){$model=D('Easay')->relation(true)->select();/**!!!注意!这里只能用D方法,不能用M方法!并且D方法里面的值要和刚刚起的模型名字要匹配。我写的模型名叫EasayModel.class.php,所以D方法里放的是Easay**/var_dump($model);}
}
?>

番外

D方法虽说和M方法虽然都能对数据库进行操作,但是D方法除此之外还有很多用处,比如可以查到同表名的model类,自动验证,自动填充,关联查询。。。
而如果只用到一般的增删改查,就用M方法就可以了。


推荐阅读
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • AngularJS 进阶指南:第三部分深入解析
    在本文中,我们将深入探讨 AngularJS 的指令模型,特别是 `ng-model` 指令。`ng-model` 指令用于将 HTML 元素与应用程序数据进行双向绑定,支持多种数据类型验证,如数字、电子邮件地址和必填项检查。此外,我们还将介绍如何利用该指令优化表单验证和数据处理流程,提升开发效率和用户体验。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • 本文将详细介绍如何在 Vue 项目中使用 Handsontable 插件,包括 npm 安装、基本配置和常用功能的实现。 ... [详细]
  • 本文详细介绍了 com.apollographql.apollo.api.internal.Optional 类中的 orNull() 方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • Ext JS MVC系列一:环境搭建与框架概览
    本文主要介绍了如何在项目中使用Ext JS 4作为前端框架,并详细讲解了Ext JS 4的MVC开发模式。文章将从项目目录结构、相关CSS和JS文件的引用以及MVC框架的整体认识三个方面进行总结。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 本指南详细介绍了如何从零开始搭建ThinkPHP项目环境。首先,我们将创建一个名为“test”的PHP项目,并导入ThinkPHP框架。接下来,配置单入口文件,确保项目能够正确运行。ThinkPHP作为一个基于单一入口模式的PHP框架,简化了开发流程。通过本文,读者将学会如何高效地设置和测试ThinkPHP项目。 ... [详细]
author-avatar
syjs10
这个家伙很懒
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有