考虑这个查询及其结果:
Yii::app()->db->createCommand(
"SELECT name FROM users WHERE city='Paris'"
)->queryColumn();
结果:
Array
(
[0] => John Kerry
[1] => Marry White
[2] => Mike Jain
)
关于如何构建此查询的任何建议ActiveRecord
?有必要接收数组。
考虑这个查询及其结果:
Yii::app()->db->createCommand(
"SELECT name FROM users WHERE city='Paris'"
)->queryColumn();
结果:
Array
(
[0] => John Kerry
[1] => Marry White
[2] => Mike Jain
)
关于如何构建此查询的任何建议ActiveRecord
?有必要接收数组。
使用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',
// ...
}
一条活动记录,顾名思义,将为数据库中的每一行返回一条完整的记录,因此从每一行中仅获取一个字段的最佳方法是使用查询构建器,类似于上面的内容。
如果您真的想使用 AR 并且只想要数组中的名称,那么这样的事情可能会起作用:
$names = array();
$users = users::model()->findAllByAttributes(array('city'=>'Paris'));
foreach(array_keys($users) as $key)
{
$names[] = $users[$key]->name;
}
尽管如果您不使用 AR 搜索中的任何其他详细信息,那么仅提取名称会产生很多开销。
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
$words = Word::model()->findAll();
$data=array_map(create_function('$m','return $m->getAttributes();'),$words);
var_dump($data);
使用 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;
}
在此链接中按照我对其他问题中相同问题的回答。
如前所述,您可以使用findAllByAttributes (array $attributes, mixed $condition='', array $params=array ( )) 并告诉此方法仅获取匹配记录的“名称”列。为此,您需要将CDbCriteria的实例作为 $condition 传递,并在此实例上指定“选择”列。