Yii - Как получить массив значений из активной записи - PullRequest
8 голосов
/ 21 февраля 2012

Используя Yii, как я могу получить массив из Active Record.

Скажите что-то вроде этого:

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

От чего-то вроде этого:

MyTable::model()->findall()

Ответы [ 9 ]

24 голосов
/ 21 февраля 2012

Если я вас правильно понял:

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

Это даст вам идентификатор массива => name

Array {
    2 => 'someone',
    20 => 'kitty',
    102 => 'Marian',
    // ...
}
7 голосов
/ 12 марта 2013

ActiveRecord класс имеет атрибут с именем attribute . Вы можете найти его описание здесь: http://www.yiiframework.com/doc/api/1.1/CActiveRecord#attributes-detail.

Чтобы получить все атрибуты в массиве, используйте это: $var = $model->attributes;

6 голосов
/ 28 января 2015

Для yii2 используйте:

yii\helpers\ArrayHelper::map(MyModel::find()->all(), 'id', 'name'));

или

yii\helpers\ArrayHelper::getColumn(MyModel::find()->all(), 'name'));
3 голосов
/ 30 июля 2013

Вы также можете сделать что-то вроде

$countries = Country::model()->findAll();
array_values(CHtml::listData($countries, 'country_id', 'country_name'));

, который возвращает массив всех названий стран, или

array_keys(CHtml::listData($countries, 'country_id', 'country_name'));

, который возвращает массив идентификаторов всех стран.

1 голос
/ 21 октября 2015

Используйте ArrayHelper Yii2, включив в свой контроллер это преобразует данные модели в связанный массив

    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]));
1 голос
/ 09 мая 2014

Как насчет:

Yii::app()->db->createCommand()
    ->setFetchMode(PDO::FETCH_COLUMN,0)
    ->select("mycolumn")
    ->from(MyModel::model()->tableSchema->name)
    ->queryAll();

Результат будет:

array('foo', 'bar', 'lala')
0 голосов
/ 02 октября 2015

, если вы используете Yii1.1 и вам нужно получить ВСЕ данные из AR в виде массива, о котором вам нужно позаботиться. Yii1.1 AR не имеет этой функции из коробки

В Yii2 AR имеет метод asArray () , это очень полезно

Надеюсь, мой ответ кому-нибудь поможет

0 голосов
/ 12 декабря 2013

Используйте 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, например ::10000

class ActiveRecord extends CActiveRecord {
//...
}

И используйте этот способ:

return $model->queryAll($criteria);

Подробнее о можно узнать по этой ссылке .

0 голосов
/ 21 февраля 2012

Не использовать ActiveRecord . Используйте CDBCommand->queryColumn()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...