热到列作为数组键和值?

时间:2015-11-14 14:33:20

标签: php orm laravel-5.1

Laravel检索关联数组的方法是什么,其中,键是查询的第一列,值是第二列。

User::select('id','type')->unknown();

应该返回:

[
2=>'s',  
30=>'t',
32=>'x',
]

2 个答案:

答案 0 :(得分:2)

应该是:

User::lists( 'type', 'id' )->all();

答案 1 :(得分:1)

我不认为该方法存在,但您可以做的是在返回的关联数组上使用array_column来获得您想要的内容:

$array = User::select( 'type', 'id' )->all();//get array of assoc arrays
$result = array_column($array, 'type', 'id');//column

这将使用id的每个子数组中的$array键(即每个结果/关联数组)作为键返回一个数组,并将type值作为值返回。所以如果$array看起来像这样:

$array = [
    [
        'id'   => 1,
        'type' => 'a',
    ],
    [
        'id'   => 2,
        'type' => 'b',
    ],
];

array_column来电的结果如下:

$result = [
    1 => 'a',
    2 => 'b',
];

注意 array_column需要PHP 5.5或更高版本,如果您运行的是5.4,并且无法升级,请编写自己的函数,它是很容易:

function myArrayCol(array $in, $valKey, $idxKey = null)
{
    $result = [];
    foreach ($in as $sub) {
        if (!is_array($sub)) {
            throw new RuntimeException('myArrayCol requires a multi-dimensional array to be passed');
        }
        $value = isset($sub[$valKey]) ? $sub[$valKey] : null;
        if ($idxKey === null || !isset($sub[$idxKey])) P
            $result[] = $value;
        } else {
            $result[$sub[$idxKey]] = $value;
        }
    }
    return $result;
}

请注意,此实现完全未经测试,但您可以获得基本的想法......

更新

很明显,laravel确实有一种方法可以完成OP想要的操作,正如@Mat建议的那样,the docs显示:

$result = User::lists('type', 'id')->all();

返回OP在单行中的结果。