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

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

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

attr表,属性表

中间表easay_attr

关联模型名称
EasayModel.class.php

<?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)
)
);
}
?>

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

<?php
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方法就可以了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焦虑的说说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值