Yiiを使用して、アクティブレコードから配列を取得する方法を教えてください。Yii - アクティブレコードから値の配列を取得する方法
言って、このような何か:このような何かから
array('foo', 'bar', 'lala')
:
MyTable::model()->findall()
Yiiを使用して、アクティブレコードから配列を取得する方法を教えてください。Yii - アクティブレコードから値の配列を取得する方法
言って、このような何か:このような何かから
array('foo', 'bar', 'lala')
:
MyTable::model()->findall()
ActiveRecordを使用しないでください。 CDBCommand->queryColumn()
Meh ... Djangoはこれを持っています:https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-listどうしてYiiもそれを持っていないのですか? – Marian
ActiveRecordのbeforeFindメソッドまたはafterFindメソッドを使用している場合、これは(明らかに)呼び出されません。たとえば、私はqueryColumnで呼び出されなかったbeforeFindでいくつかのプレフィルタリングを行っていたので、予想以上の結果が得られました。幸いなことに、このようなものを捕まえるためにいくつかのテストを実施しました。そうしないと、生産上の道を壊してしまいます。 –
質問は、実際のデータをMyTable :: model() - > findall()から取得することです。だから、答えはirreleventです。 –
私が正しくあなたを理解していれば:
$users = User::model()->findAll();
$usersArr = CHtml::listData($users, 'id' , 'name');
print_r($usersArr);
それは=あなたのアレイIDを与えます>名前
Array {
2 => 'someone',
20 => 'kitty',
102 => 'Marian',
// ...
}
ActiveRecordのクラスを使用し属性という属性を持っています。ここでその説明を見つけることができます: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の配列を返します。
これは醜いハックです!
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で詳しく読むことができます。
[リンクのみの回答](http://meta.stackoverflow.com/tags/link-only-answers/info)はお勧めできませんので、SOの回答は解決策の検索の終点でなければなりません。時間の経過とともに古くなる傾向がある参照の途中降機)。リンクを参考にして、ここにスタンドアロンの概要を追加することを検討してください。 – kleopatra
方法について:
Yii::app()->db->createCommand()
->setFetchMode(PDO::FETCH_COLUMN,0)
->select("mycolumn")
->from(MyModel::model()->tableSchema->name)
->queryAll();
結果は次のようになります。
yii2、使用のためにarray('foo', 'bar', 'lala')
:
yii\helpers\ArrayHelper::map(MyModel::find()->all(), 'id', 'name'));
または
yii\helpers\ArrayHelper::getColumn(MyModel::find()->all(), 'name'));
Yii1.1を使用していて、ARからすべてのデータをアレイとして取得する必要がある場合は、それを自己が気にする必要があります。 Yii1。1 ARは、箱から出して、この機能を持っていない
Yii2 ARでがasArray()方法を持っている、それは非常に便利です
私は私の答えはあなたのコントローラに含めることによって誰か
例を挙げると少し上手く役立つかもしれません。 –
使用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]));
foo、bar、lalaとは何ですか?テーブル/モデルまたは異なるモデルオブジェクトの属性? –
あなたはfindAll関数のためにどのようにcondition、paramsなどを使うことができるか尋ねようとしていますか? – Arfeen
値。私はテーブルから配列の値を取得したい。例えば、国を含むテーブルからの国の配列。 – Marian