临近下班,小涛收到上海琪哥sos求救,说关联模型怎么就不能关联呢?下面说一下解决办法及最新感触:
首先,遇到问题不要慌张,应该感到高兴,正是技术提升的时候,所以遇到问题时要高兴。
其次,要分析问题的基本原理,ThinkPHP对大家来说并不陌生,但是对里面细节的东西,得要查阅一下手册来探个究竟,本博客有一些关于ThinkPHP的一些知识。ThinkPHP的关联操作的大体思路是这样的: 一个主表,有个自增的member_id 一个从表,有个与主表进行关联的member_id,下面以代码实例进行讲解:
class BuilderModel extends RelationModel
{
protected $trueTableName = ‘member_basic’; //这里声明基本表(主表)
protected $fields = array(
‘member_id’,
‘name’, //这里是基本表的一些字段
‘_pk’=>’member_id’, //这里基本表的主键member_id
‘_autoinc’=>true
);
public $_link = array(
‘detail‘=>array(
‘mapping_type’ => HAS_ONE, //关联类型,一对一
‘mapping_name’ => ‘detail’, //mapping_name的名字和调用时的名字保持一致,加粗部分
‘class_name’ => ‘MemberDetail’, //关联的从表
‘foreign_key’ => ‘member_id’, //关联的主表的字段,注意:这里不是从表的主键
‘as_fields’ => ‘qq,email’ //要关联从表的某些字段
),
}
下面说一下怎么调用:
$Builder = D(‘Builder’);
$detail = array(
“qq” => $_POST[‘qq’], //接收从表的字段
“email” => $_POST[’email’] //接收从表的字段);
$Builder->name = $_POST[‘name’] //接收主表的字段
$Builder->detail = $detail; //把接收过来从表的值赋值给从表
$result = $Builder->relation(true)->add(); //执行添加
哈哈,经过好大一会才试验成功,这些操作中有几点需要注意:
1、主表的自增member_id (主键)
2、从表的member_id(不是主键)
3、mapping_name的名字和调用时的名字保持一致,加粗部分
4、调用的时候要注意,要进行相对应
做到这些,基本上就可以实现ThinkPHP的关联操作了,感谢琪哥,以前对关联模型也是模模糊糊,经过这次之后,咦,原来关联模型是这个样子的……