首页 > 建站百科 > 网站建设 > ThinkPHP3.2.3 关联更新中间表删除后,insert出错

ThinkPHP3.2.3 关联更新中间表删除后,insert出错

时间:2015-03-03 10:00:12 来源:西安网站建设
我最近用Thinkphp3.2.3写了一个简单的RBAC(权限管理系统),在管理员表(qs_user)和管理员角色中间表(qs_role_user)遇到了关联更新出现错误的问题。我纠结了很久,才在thinkphp的代码中发现了问题。


模型代码如下:

protected $_link = array(
	'Role'=>array(
		'mapping_type'=>self::MANY_TO_MANY,
		'class_name' =>  'Role', //要关联的模型类名
		'foreign_key'=>'user_id', //关联的外键名称
		'relation_foreign_key'=>'role_id', //关联表的外键名称
		'relation_table'=>'qs_role_user', //多对多的中间关联表名称
		'mapping_fields'=>'id,name',
	),
);
修改管理员数据代码如下:

$User = D('User');
			
$da['id'] = I('post.id','',int);
$da['username'] = strval(I('post.username'));
$da['email'] = strval(I('post.email'));
$da['qq'] = strval(I('post.qq'));
$da['tel'] = strval(I('post.tel'));
$da['relname'] = strval(I('post.relname'));
$da['status'] = strval(I('post.status'));
$da["Role"] = array(
	'role_id'=>I('post.role','',int),
	'user_id'=>$id
);
$User-> relation(true)->where(array('id'=>$id))->save($da);
$this->success('操作成功','/Admin/Rbac/user.html');

刚开始的时候不停的出现


然后我打印出SQL语句查看,发现sql语句是

INSERT INTO qs_role_user (user_id,role_id) SELECT a.id,b.id FROM qs_user AS a ,qs_role AS b where a.id =7 AND b.id IN (,)

发现这个sql语句本来就执行不通,造成的结果是,管理员表(qs_user)中的数据可以更改,管理员角色中间表(qs_role_user)中的关联数据被删除后,重新插入的时候产生错误。数据库里面没有新的数据生成。历经千辛万苦,我终于找到原来thinkphp3.2.3的关联模型扩展RelationModel第340行源码有一些问题。

原代码是:

if(is_array($mappingData)) {
      $ids   = array();
      foreach ($mappingData as $vo)
          $ids[]   =   $vo[$mappingKey];   //原代码
      $relationId =   implode(',',$ids);
}
我将红色的地方修改成:

if(is_array($mappingData)) {
      $ids   = array();
      foreach ($mappingData as $vo)
          $ids[]   =   $vo;
      $relationId =   implode(',',$ids);
}

最后测试一下我发现我这边的功能都正常运转,今天特此记录一下,希望可以帮到各位做Thinkphp开发的码农们。

转载的请加上我们的链接:西安网站建设 http://www.sxqswl.net/show-23-67-1.html

阅读过此文章的读者,还阅读过下面的文章

2015-03-03 10:00:12      通过 composer 升级 Yii2
2015-03-03 10:00:12      4分钟学会网页样式
2015-03-03 10:00:12      西安高端网站建设时要注意什么
2015-03-03 10:00:12      CDN加速原理
2015-03-03 10:00:12      一般企业网站建设需要哪些流程?
2015-03-03 10:00:12      西安网站建设告诉您:您网站的内容是好是坏?
2015-03-03 10:00:12      西安大闸蟹的网站要怎么建设呢?
2015-03-03 10:00:12      网站建设前期的时候需要做什么
2015-03-03 10:00:12      网站建设中,适合才是最好的!
2015-03-03 10:00:12      一个优秀的网站建设应包含哪些要素?
2015-03-03 10:00:12      西安网站建设公司告诉您为什么大家都在换响应式网站呢?
2015-03-03 10:00:12      一般的企业建设网站需要多大的空间呢?