模型的column方法

瀏覽:894 發布日期: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');
評論(
后面還有條評論,點擊查看>>
广西快3开奖走势图一定牛