2012-02-21 36 views
8

Yiiを使用して、アクティブレコードから配列を取得する方法を教えてください。Yii - アクティブレコードから値の配列を取得する方法

言って、このような何か:このような何かから

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

MyTable::model()->findall() 
+0

foo、bar、lalaとは何ですか?テーブル/モデルまたは異なるモデルオブジェクトの属性? –

+0

あなたはfindAll関数のためにどのようにcondition、paramsなどを使うことができるか尋ねようとしていますか? – Arfeen

+0

値。私はテーブルから配列の値を取得したい。例えば、国を含むテーブルからの国の配列。 – Marian

答えて

0

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

+0

Meh ... Djangoはこれを持っています:https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-listどうしてYiiもそれを持っていないのですか? – Marian

+1

ActiveRecordのbeforeFindメソッドまたはafterFindメソッドを使用している場合、これは(明らかに)呼び出されません。たとえば、私はqueryColumnで呼び出されなかったbeforeFindでいくつかのプレフィルタリングを行っていたので、予想以上の結果が得られました。幸いなことに、このようなものを捕まえるためにいくつかのテストを実施しました。そうしないと、生産上の道を壊してしまいます。 –

+2

質問は、実際のデータをMyTable :: model() - > findall()から取得することです。だから、答えはirreleventです。 –

24

私が正しくあなたを理解していれば:

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

それは=あなたのアレイIDを与えます>名前

Array { 
    2 => 'someone', 
    20 => 'kitty', 
    102 => 'Marian', 
    // ... 
} 
+0

ええ、私はそれを考えましたが、「名前」だけを使う方法はありませんか? – Marian

+0

名前だけを使用したいのであれば、キーは問題ではありませんか?必要に応じて、array_valuesを使用してキーをリセットすることができます。 –

+1

Neah ..それはそのようには動作しません.. – Marian

3

あなたはまた、

$countries = Country::model()->findAll(); 
array_values(CHtml::listData($countries, 'country_id', 'country_name')); 
すべての国の名前の配列を返します

、または

array_keys(CHtml::listData($countries, 'country_id', 'country_name')); 
ような何かを行うことができます

すべての国IDの配列を返します。

0

これは醜いハックです!

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で詳しく読むことができます。

+0

[リンクのみの回答](http://meta.stackoverflow.com/tags/link-only-answers/info)はお勧めできませんので、SOの回答は解決策の検索の終点でなければなりません。時間の経過とともに古くなる傾向がある参照の途中降機)。リンクを参考にして、ここにスタンドアロンの概要を追加することを検討してください。 – kleopatra

1

方法について:

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

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

yii2、使用のために
array('foo', 'bar', 'lala') 
5

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

または

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

Yii1.1を使用していて、ARからすべてのデータをアレイとして取得する必要がある場合は、それを自己が気にする必要があります。 Yii1。1 ARは、箱から出して、この機能を持っていない

Yii2 ARで

asArray()方法を持っている、それは非常に便利です

私は私の答えはあなたのコントローラに含めることによって誰か

+0

例を挙げると少し上手く役立つかもしれません。 –

1

使用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])); 
関連する問題