使用Yii,我如何从Active Record中获取数组。
说出这样的话:
array('foo', 'bar', 'lala')
从这样的事情:
MyTable::model()->findall()
答案 0 :(得分:24)
如果我理解正确的话:
$users = User::model()->findAll();
$usersArr = CHtml::listData( $users, 'id' , 'name');
print_r( $usersArr );
它会给你数组id =>名称
Array {
2 => 'someone',
20 => 'kitty',
102 => 'Marian',
// ...
}
答案 1 :(得分:7)
ActiveRecord 类有一个名为 attributes 的属性。您可以在此处找到其说明:http://www.yiiframework.com/doc/api/1.1/CActiveRecord#attributes-detail。
要获取数组中的所有属性,请使用:$var = $model->attributes;
答案 2 :(得分:6)
对于yii2,请使用:
yii\helpers\ArrayHelper::map(MyModel::find()->all(), 'id', 'name'));
或
yii\helpers\ArrayHelper::getColumn(MyModel::find()->all(), 'name'));
答案 3 :(得分:3)
您也可以执行类似
的操作$countries = Country::model()->findAll();
array_values(CHtml::listData($countries, 'country_id', 'country_name'));
返回所有国家/地区名称的数组,或
array_keys(CHtml::listData($countries, 'country_id', 'country_name'));
返回所有国家/地区ID的数组。
答案 4 :(得分:1)
怎么样:
Yii::app()->db->createCommand()
->setFetchMode(PDO::FETCH_COLUMN,0)
->select("mycolumn")
->from(MyModel::model()->tableSchema->name)
->queryAll();
结果将是:
array('foo', 'bar', 'lala')
答案 5 :(得分:1)
使用Yii2 ArrayHelper,通过包含到您的控制器,它将模型数据转换为关联的数组
use yii\helpers\ArrayHelper;
$post = ArrayHelper::toArray(ClientProfilesForm::findOne(['id' => 1]));
//or use it directly by
$post = yii\helpers\ArrayHelper::toArray(ClientProfilesForm::findOne(['id' => 1]));
答案 6 :(得分:0)
请勿使用 ActiveRecord 。使用CDBCommand->queryColumn()
答案 7 :(得分: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;
}
您可以将此代码添加到ActiveRecord类,例如:
class ActiveRecord extends CActiveRecord {
//...
}
并且,使用这种方式:
return $model->queryAll($criteria);
您可以在this link中了解更多信息。
答案 8 :(得分:0)
如果您使用的是Yii1.1并且您需要从AR获取所有数据作为数组,您需要关心它自己。 Yii1.1 AR没有开箱即用的功能
在Yii2 AR中有asArray()方法,它非常有帮助
我希望我的回答可以帮助某人