3

考虑这个查询及其结果:

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

结果:

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

关于如何构建此查询的任何建议ActiveRecord?有必要接收数组

4

5 回答 5

7

重复: Yii - 如何从活动记录中获取值数组

使用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 => city

Array {
    2 => 'Paris',
    102 => 'Riga',
    // ...
}
于 2012-08-14T13:30:12.780 回答
1

一条活动记录,顾名思义,将为数据库中的每一行返回一条完整的记录,因此从每一行中仅获取一个字段的最佳方法是使用查询构建器,类似于上面的内容。

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

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

尽管如果您不使用 AR 搜索中的任何其他详细信息,那么仅提取名称会产生很多开销。

于 2012-08-14T10:42:00.307 回答
1

Actually I have dealt with the same problem, I would like to use the ActiveRecord instead of CDBCommand. I have answered on the similar question before

get array from active record

$words = Word::model()->findAll();
$data=array_map(create_function('$m','return $m->getAttributes();'),$words);
var_dump($data);
于 2013-07-27T08:26:48.417 回答
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;
}

在此链接中按照我对其他问题中相同问题的回答。

于 2013-12-12T14:47:56.010 回答
0

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

于 2012-08-14T11:06:28.317 回答