模型的column方法

浏览:957 发布日期:2019/12/23
版本:TP 6.0User::column('name');
User::column('name', 'name');

// 都是返回 关联数组 ['张三'=>'张三', '李四'=>'李四']
以前TP5返回的是索引数组,User::column('name');
// 索引数组 [0=>'张三', 1=>'李四']

User::column('name', 'name');
// 关联数组 ['张三'=>'张三', '李四'=>'李四']
导致的问题,如果数据里有同名的用户,查出的数据就会与预期不一致。// TP5 ['张三', '张三', '李四']

// TP6 ['张三', '李四']
虽然TP5与TP6执行的SQL都为 SELECT name FROM user;
但TP6的结果 等同于强制加了 DISTINCT 的 SELECT DISTINCT name FROM user;原因
think\db\PDOConnection中的第1139行if (empty($resultSet)) {
            $result = [];
        } elseif (('*' == $column || strpos($column, ',')) && $key) {
            $result = array_column($resultSet, null, $key);
        } else {
            $fields = array_keys($resultSet[0]);

// 第1139行
            $key    = $key ?: array_shift($fields);

            if (strpos($column, ',')) {
                $column = null;
            } elseif (strpos($column, '.')) {
                list($alias, $column) = explode('.', $column);
            }

            if (strpos($key, '.')) {
                list($alias, $key) = explode('.', $key);
            }

            $result = array_column($resultSet, $column, $key);
        }
当$key为空时,就使用了$column充当数组的键

建议改为if(empty($key)){
    $key = null;
} else {
    $key = array_shift($fields);
}

...
$result = array_column($resultSet, $column, $key);
这样,如果想要现在的形式,就明确指定$key
User::column('name', 'name');

如果,只关心value,key用自然数填充,就简单的
User::column('name');
评论(
后面还有条评论,点击查看>>
500万彩票网