thinkphp多对多关联MANY_TO_MANY中间表relation_table表前缀支持变量填写的方法
1、大家都知道,如果在多对多关联时relation_table中间表写死,那将无法满足cms安装时候支持表前缀自定义。
thinkphp3.2.2开始,relation_table定义支持简化写法,例如:
'relation_table'=>'__USER_GROUP__'
2、用法实例:
protected $_link = array( 'News_Attr' => array( //dept可以随便取名字 'mapping_type' => self::MANY_TO_MANY,//这里跟3.1有点不一样 'class_name' => 'News',//要关联的模型类名(即表名) 'mapping_name' => 'child',//关联的映射名称,用于获取数据用(附表的关联字段) 'foreign_key' => 'attr_id',//关联的外键Id(主表的关联字段) 'relation_foreign_key' => 'news_id',//关联的外键Id(主表的关联字段) 'relation_table' => 'tuzi_attr_news' //此处应显式定义中间表名称,且不能使用C函数读取表前缀 ), );以上关联查询代码可以用下面代替,实现相同的效果:
protected $_link = array( 'News_Attr' => array( //dept可以随便取名字 'mapping_type' => self::MANY_TO_MANY,//这里跟3.1有点不一样 'class_name' => 'News',//要关联的模型类名(即表名) 'mapping_name' => 'child',//关联的映射名称,用于获取数据用(附表的关联字段) 'foreign_key' => 'attr_id',//关联的外键Id(主表的关联字段) 'relation_foreign_key' => 'news_id',//关联的外键Id(主表的关联字段) 'relation_table' => '__ATTR_NEWS__' //此处应显式定义中间表名称,且不能使用C函数读取表前缀 ), );
注意:relation_table里面的写法要大写。