热门标签 | 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方法就可以了。


推荐阅读
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • Yii framwork 应用小窍门
    Yiiframework应用小窍门1.YiiFramework]如何获取当前controller的名称?下面语句就可以获取当前控制器的名称了!Php代码 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
  • 使用这个技巧要达到的目标:一般来说,模型和控制器你都不会有相同的类名字。让我先创建一个取名为post的model。classPostextendsModel{}现在 ... [详细]
  • 我尝试使用Vue.js在Laravel中实现imageupload吗?但是,我不知道为什么图像 ... [详细]
  • php怎么创建项目目录,ThinkPHP 5.1自动生成模块及目录、文件
    试用一下ThinkPHP5.1这最新版的TP框架,创建项目很简单,在web根目录使用composer搞定:composercreate-p ... [详细]
  • ThinkPHP6 核心分析:系统服务
    什么是系统服务?系统服务是对于程序要用到的类在使用前先进行类的标识的绑定,以便容器能够对其进行解析(通过服务类的 register 方法),还有就是初始化一些参数、注册路由等(不限 ... [详细]
  • ThinkPHP 分页实现,thinkphp分页实现
    php教程|php手册thinkphpphp教程-php手册ThinkPHP分页实现,thinkphp分页实现开源安卓游戏源码下载,ubuntu时间设置界面,数据库连接池tomca ... [详细]
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社区 版权所有