thinkphp手册中关联定义 foreign_key定义介绍存在问题

浏览:2607 发布日期:2011/08/16
- 普通 - 未处理
手册中指出:
foreign_key [font=宋体]关联的外键名称[/font]

[font=宋体]外键的默认规则是当前数据对象名称[/font]_id[font=宋体],例如:[/font]

UserModel[font=宋体]对应的可能是表[/font]think_user [font=宋体](注意:[/font]think[font=宋体]只是一个表前缀,可以随意配置)[/font]

[font=宋体]那么[/font]think_user[font=宋体]表的外键默认为[/font] user_id[font=宋体],如果不是,就必须在定义关联的时候显式定义[/font] foreign_key
但实际操作中:
foreign_key 的值应该设置为被关联表格的外键 而并非当前模型(当前表格)的外键
也就是说不是 use_id 而是 article表格中的外键


由RelationModel.class.php中
if(strtoupper($mappingClass)==strtoupper($this->name)) {
// 自引用关联 获取父键名
$mappingFk = !empty($val['parent_key'])? $val['parent_key'] : 'parent_id';
}else{
$mappingFk = !empty($val['foreign_key'])?$val['foreign_key']:strtolower($this->name).'_id'; // 关联外键
}
------------------------------分割线-------------------------------------------
case HAS_MANY:
$pk = $result[$this->getPk()];
[color=Red]$mappingCondition .= " AND {$mappingFk}='{$pk}'";[/color]
$mappingOrder = !empty($val['mapping_order'])?$val['mapping_order']:'';
$mappingLimit = !empty($val['mapping_limit'])?$val['mapping_limit']:'';
// 延时获取关联记录
$relationData = $model->where([color=Red]$mappingCondition)->field($mappingFields)->order($mappingOrder)->limit($mappingLimit)->select();[/color]
break;

可以看出使用user_id 是错误的!
不知道有没有人碰到以上问题,如果我的发现本身存在误解的话请欢迎指出!


评论(
后面还有条评论,点击查看>>