我已经阅读了一些资料,截至目前,我知道实现此目标的 3 种方法。
1:使用PDO::FETCH_KEY_PAIR
例子:
$Query=Yii::app()->db->createCommand('SELECT col1,col2 FROM '.static::tableName().' ORDER BY '.static::tablePrefix().'_id');
$Query->setFetchMode(PDO::FETCH_KEY_PAIR);
return $Query->queryAll();
效果非常好,但是...仅适用于 2 列。 (顺便说一句,还有其他方法可以传递获取类型吗?CDbCommand 类及其查询函数只接受 true/false。
2:使用PDO::FETCH_GROUP|PDO::FETCH_ASSOC
+ array_map('reset', $result)
例子:
$Query=Yii::app()->db->createCommand('SELECT users.user_id,summoners.summoner_name,users.user_login FROM `participants` INNER JOIN `users` ON participant_id=user_id INNER JOIN `summoners` ON user_id=summoner_user_id WHERE participants.tournament_id=1 AND summoners.summoner_region=\'eune\'');
$Query->prepare();
$Query=$Query->getPdoStatement();
$Query->execute();
$Result=$Query->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
return array_map('reset', $Result);
这很奇怪,令人困惑,而且看起来确实多余且无效。如果不从 Yii 的 CDbCommand 中提取语句,可能有一些更简单的方法,但仍然如此。
3: 使用query()
+ foreach
例子:
$Query=Yii::app()->db->createCommand('SELECT users.user_id,summoners.summoner_name,users.user_login FROM `participants` INNER JOIN `users` ON participant_id=user_id INNER JOIN `summoners` ON user_id=summoner_user_id WHERE participants.tournament_id=1 AND summoners.summoner_region=\'eune\'');
$Data=$Query->query();
foreach ($Data as $row)
foreach ($row as $k=>$v)
if($k!='user_id') $Result[$row['user_id']][$k]=$v;
return $Result;
所以第三个选项似乎是可行的方法,但我们没有相应的提取类型吗?我的意思是……现在是 2014 年,而不是 1990 年。
最佳答案
不,我们不悲伤。如果您深入研究 Yii 的 ActiveRecord 系统以查看 index
是如何为关系设置的,您会发现其中有一个 forrach
循环 :-/
我知道,因为我有同样的问题,并且希望得到与您正在寻找的相同的答案;-)
关于php - 如何通过PDO正确获取以表的主键作为数组键的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25060449/