如何使用Yii ActiveRecord接收数组

时间:2012-08-14 09:43:10

标签: arrays activerecord yii

考虑此查询及其结果:

Yii::app()->db->createCommand(
    "SELECT name FROM users WHERE city='Paris'"
)->queryColumn();

结果:

Array
(
    [0] => John Kerry
    [1] => Marry White
    [2] => Mike Jain
)

有关如何使用ActiveRecord构建此查询的任何建议? 必须接收数组

5 个答案:

答案 0 :(得分:7)

重复: Yii - How to get a values array from an Active Record

使用CHtml::listData(请参阅http://www.yiiframework.com/wiki/48/by-example-chtml/#hh3

$users = User::model()->findAll();
$usersArr = CHtml::listData( $users, 'id' , 'city');
print_r( $usersArr );

它会给你数组id =>城市

Array {
    2 => 'Paris',
    102 => 'Riga',
    // ...
}

答案 1 :(得分:1)

一个活动记录,按其名称,将返回数据库中每一行的整个记录​​,因此从每一行获取一个字段的最佳方法是使用querybuilder,就像你的那样我们上面了。

如果您真的想使用AR并且只想在数组中使用该名称,那么这样的事情可能会起作用:

$names = array();
$users = users::model()->findAllByAttributes(array('city'=>'Paris'));
foreach(array_keys($users) as $key)
{
    $names[] = $users[$key]->name;
}

如果您没有使用AR搜索中的任何其他详细信息,那么仅仅提取名称会产生大量开销。

答案 2 :(得分:1)

其实我已经解决了同样的问题,我想使用ActiveRecord而不是CDBCommand。

之前我已回答了类似的问题

get array from active record

$words = Word::model()->findAll();
$data=array_map(create_function('$m','return $m->getAttributes();'),$words);
var_dump($data);

答案 3 :(得分:0)

如前所述,您可以使用findAllByAttributes(数组$ attributes,mixed $ condition ='',array $ params = array())并告诉此方法仅获取“name”列的记录它匹配。为此,您需要将$ CDbCriteria的实例作为$ condition传递,并在此实例中指定'select'列。

答案 4 :(得分:0)

使用Chtml这是一个丑陋的黑客!简而言之,您可以这样做:

public function queryAll($condition = '', $params = array())
{
    $criteria = $this->getCommandBuilder()->createCriteria($condition, $params);
    $this->applyScopes($criteria);
    $command = $this->getCommandBuilder()->createFindCommand($this->getTableSchema(), $criteria);
    $results = $command->queryAll();
    return $results;
}

this link中,按照我对其他问题的相同问题的回答。