Yii - Как получить массив значений из активной записи

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

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

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

Из чего-то вроде этого:

MyTable::model()->findall()
 Arfeen21 февр. 2012 г., 13:50
Вы пытаетесь спросить, как вы могли бы использовать условие, параметры и т.д. для функции findAll?
 bool.dev21 февр. 2012 г., 13:45
что такое фу, бар и лала? атрибуты таблицы / модели или различных модельных объектов?
 Marian21 февр. 2012 г., 13:50
Ценности. Я хочу получить массив значений из таблицы. Например, массив стран из таблицы, которая содержит страны.

Ответы на вопрос(9)

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

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

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

 Wes Foster06 окт. 2015 г., 03:32
Предоставление примера может помочь немного лучше.

чтобы это был Гадкий Хак! Примените это решение лучше, чем то, что я нашел:

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);

Вы можете прочитать больше о вэта ссылка.

 kleopatra12 дек. 2013 г., 15:47
Обратите внимание, чтотолько ссылки не одобряются, поэтому ответы SO должны стать конечной точкой поиска решения (в отличие от еще одной остановки ссылок, которая, как правило, со временем устареет). Пожалуйста, рассмотрите возможность добавления отдельного краткого обзора здесь, сохраняя ссылку в качестве ссылки.

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

    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]));

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

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

Это даст вам массив id => name

Array {
    2 => 'someone',
    20 => 'kitty',
    102 => 'Marian',
    // ...
}
 Marian21 февр. 2012 г., 14:06
Да, я думал об этом, но разве нет способа использовать только «имя»?
 Marian22 февр. 2012 г., 12:43
Неа .. это не работает так ...
 Maykonn12 дек. 2013 г., 15:42
Боже мой! CHtml, чтобы получить как массив! МакГайвер!
 Michael Lindfors22 февр. 2012 г., 09:45
Ключ не должен быть проблемой, если вы хотите использовать только имя? Вы можете использовать array_values для сброса ключей, если хотите.
Решение Вопроса

ActiveRecord, использованиеCDBCommand->queryColumn()

 Marian24 февр. 2012 г., 11:26
Мех ... Джанго имеет это:docs.djangoproject.com/en/dev/ref/models/querysets/#values-list Почему у Yii это тоже не может быть?
 trejder17 апр. 2015 г., 13:48
Ответ не по теме. ОП спрашивает о преобразовании результата ActiveRecord в массив. Не о запросе данных из базы данных в виде массива.
 Ian Hunter04 янв. 2013 г., 21:03
Если вы используете какие-либо методы beforeFind или afterFind для своей ActiveRecord, это (очевидно) не вызовет их. Например, я выполнял некоторую предварительную фильтрацию в beforeFind, который не вызывался в queryColumn, поэтому мы получали больше результатов, чем ожидалось. К счастью, у нас было несколько тестов, чтобы поймать подобные вещи, иначе это могло бы повредить нам в будущем.
 Aladdin Mhemed03 окт. 2013 г., 14:15
вопрос в том, чтобы получить реальные данные из MyTable :: model () -> findall (); Итак, ответ не имеет значения

Как насчет:

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

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

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

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

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

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

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

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

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

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

или же

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

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

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

Ваш ответ на вопрос