Yiiを使用して、アクティブレコードから配列を取得するにはどうすればよいですか。
次のように言います。
array('foo', 'bar', 'lala')
このようなものから:
MyTable::model()->findall()
ActiveRecordは使用しないでください。 CDBCommand->queryColumn()
を使用する
私があなたを正しく理解している場合:
$users = User::model()->findAll();
$usersArr = CHtml::listData( $users, 'id' , 'name');
print_r( $usersArr );
それはあなたに配列ID =>名前を与えるでしょう
Array {
2 => 'someone',
20 => 'kitty',
102 => 'Marian',
// ...
}
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;
あなたも次のようなことをすることができます
$countries = Country::model()->findAll();
array_values(CHtml::listData($countries, 'country_id', 'country_name'));
すべての国名の配列を返す、または
array_keys(CHtml::listData($countries, 'country_id', 'country_name'));
これは、すべての国IDの配列を返します。
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]));
どうですか:
Yii::app()->db->createCommand()
->setFetchMode(PDO::FETCH_COLUMN,0)
->select("mycolumn")
->from(MyModel::model()->tableSchema->name)
->queryAll();
結果は次のようになります。
array('foo', 'bar', 'lala')
yii1.1を使用していて、ARからすべてのデータを配列として取得する必要がある場合は、それ自体を気にする必要があります。 Yii1.1 ARには、この機能はそのままではありません
Yii2 ARには asArray() メソッドがあり、非常に役立ちます
私の答えが誰かに役立つことを願っています
これに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);
詳細については、 このリンク を参照してください。