Yii - 如何从Active Record中获取值数组

时间:2012-02-21 11:45:27

标签: arrays activerecord yii

使用Yii,我如何从Active Record中获取数组。

说出这样的话:

array('foo', 'bar', 'lala')

从这样的事情:

MyTable::model()->findall()

9 个答案:

答案 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()方法,它非常有帮助

我希望我的回答可以帮助某人