如何通过PDO正确获取表的主键作为数组键的数组?

时间:2014-07-31 13:43:48

标签: php yii pdo

我已经完成了一些阅读,到目前为止,我知道有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列。 (顺便问一下,有没有其他方法来传递fetch类型?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;

所以第三个选项似乎是要走的路,但是我们不是有一个fetch类型吗?我的意思是......它是2014年,而不是1990年。

1 个答案:

答案 0 :(得分:1)

不,我们不遗憾。如果您深入研究ActiveRecord系统,让Yii查看index如何为关系设置,那么您将在那里找到forrach循环: - /

我知道,因为我有同样的问题,希望找到你想要的答案; - )

相关问题