如图

可是数据库里面是有数据的
模型定义没有问题
<?php
namespace Home\Model;
use Think\Model;
use Think\Model\RelationModel;
class TagModel extends RelationModel {
protected $_link = array(
'Childs'=>array(
'mapping_type' => self::HAS_MANY,
'class_name'=>'tag',
'mapping_name'=>'Childs',
'foreign_key'=>'ParentId',
'parent_key'=>'ParentId'
)
);
}
然后我直接查看日志发现以下内容
NOTIC: [8] Undefined index: Id D:\wamp\www\ThinkPHP\Library\Think\Model\RelationModel.class.php 第 169 行.
找到该行代码如下
$pk = $result[$mappingKey];
我试着 dump下 $result、$mappingKey和$pk的值结果如下图

$result正常、$mappingKey为'Id' $pk为空
问题出来了 $reslut里面的主键 'id'是小写的 而$mappingKey是大写开头的'Id' 所以$pk找不到造成了后面的一系列问题
$mappingKey如何来的呢 看一下定义
$mappingKey =!empty($val['mapping_key'])? $val['mapping_key'] : $this->getPk(); // 关联键名
$val['mapping_key']是空的 $mappingKey调用的是$this->getPK()获取的主键'Id'试着把$mappingKey改为小写 结果正常了
为什么getPk()获取的是大写开头的'Id' 而$result获取的数据里面字段都是小写的呢
可以看下我的数据表 如下图

字段都是大写的
我的问题是 为什么$result获取的字段全部变成了小写呢 而$mappingKey却是正常的数据库大小写格式
我试着在Model中添加主键
protected $pk = 'id';
但是getPk()获取的还是大写开头的数据库主键格式'Id'有相关的配置吗 还是数据库表的字段设计要全小写呢 还是系统(windows)的原因 ?
最佳答案
