web-dev-qa-db-ja.com

Yii-アクティブレコードから値の配列を取得する方法

Yiiを使用して、アクティブレコードから配列を取得するにはどうすればよいですか。

次のように言います。

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

このようなものから:

MyTable::model()->findall()
8
Marian

ActiveRecordは使用しないでください。 CDBCommand->queryColumn()を使用する

0
Neil McGuigan

私があなたを正しく理解している場合:

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

それはあなたに配列ID =>名前を与えるでしょう

Array {
    2 => 'someone',
    20 => 'kitty',
    102 => 'Marian',
    // ...
}
24
briiC

Yii2の場合、次を使用します。

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

または

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

ActiveRecordクラスにはattributesという属性があります。その説明はここにあります: http://www.yiiframework.com/doc/api/1.1/CActiveRecord#attributes-detail

配列内のすべての属性を取得するには、次を使用します。$var = $model->attributes;

7
samanca

あなたも次のようなことをすることができます

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

すべての国名の配列を返す、または

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

これは、すべての国IDの配列を返します。

3
choppingblock

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

どうですか:

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

結果は次のようになります。

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

yii1.1を使用していて、ARからすべてのデータを配列として取得する必要がある場合は、それ自体を気にする必要があります。 Yii1.1 ARには、この機能はそのままではありません

Yii2 ARには asArray() メソッドがあり、非常に役立ちます

私の答えが誰かに役立つことを願っています

0
Max H.

これに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);

詳細については、 このリンク を参照してください。

0
Maykonn