web-dev-qa-db-ja.com

Yiiモデルから配列へ?

Trips::model()->findAll()の結果を配列に変換するにはどうすればよいですか?

31
Joeeee

ここでは、関連するモデルオブジェクトではなく、ベアアレイのみを取得する必要があると仮定します。

これはそれを行います:

_$model = Trips::model();
$trips = $model->getCommandBuilder()
               ->createFindCommand($model->tableSchema, $model->dbCriteria)
               ->queryAll();
_

これはYii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();の例に似ていますが、次の点が異なります。

  • モデルにテーブル名を尋ねます。モデルとクエリの両方にテーブル名を記述する必要はありません。

  • 最初に_$model_で scoping 関数を呼び出すことができます。
    $model = Trips::model()->short()->destination('Austin, TX');
    これを行うと、モデルをクエリに直接配置する代わりに、モデルの既存のクエリショートカットを使用できるようになります。

対照的に、$trips = Trips::model()->findAll();(foreachを使用)は、データベースから行を引き出し、オブジェクトの束を設定し、それらをすべて破棄するという点で、少し無駄です。結果セットが小さい場合は問題なく動作しますが、トリップの長いリストを表示している場合は使用しません。

注意:
これが簡単なプロトタイプの場合は、createCommand()またはfindAll()-and-loopの例を必ず使用してください。

34
Rob Howard

これは正しい方法で、Yiiの規則に従っています

$trips = Trips::model()->findAll();
$arr = array();
foreach($trips as $t)
{
    $arr[$t->id] = $t->attributes;
}

これは、Yii規約で作成するのが難しいと思う複雑なクエリがある場合に使用されます。

Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();

たとえば、モデルからすべてのデータを配列に渡す必要がある場合。不要なActiveRecordデータ情報を渡すため、直接渡すことはできません。

25
oditiwebs.com

これは同じです。

$array = CHtml::listData(Trips::model()->findAll(), 'trip_id', 'trip_name');
13
Tude ajus

簡単で簡単な方法: listData() メソッドを使用して、ドロップダウンメニューに配列を作成します。これが役立つと思います。この例を確認してください。

コード:

<?php 
     /*you can use here any find method you think 
     proper to return your data from db*/
     $models = Trips::model()->findAll();

     // format models resulting using listData     
     $tripsArray = CHtml::listData($models, 'id', 'name');    

     print_r($tripsArray);
?>

出力:

array(
 '1'=>'trip1',
 '2'=>'trip2',
 '3'=>'trip3',
)
6
Abudayah
$model = Trips::model()->findAll(); 
$arr = CHtml::listData($model, 'trip_id', 'trip_name');
var_dump($arr);

CHtml :: listData()は配列値を返します。

4
user598031

コレクションを作成できますCMap彼女との作業を続けます

$collections = new CMap();
foreach (YourModel::model()->findAll(['index' => 'id']) as $key => $row) {
   $collections->add($key,$row->attributes);
}
var_dump($collections ->toArray());
3
Ivan Smorodin

これを使用できます。

$Trips::model()->findAll(array('index'=>'trip_id'));
if(count($Trips)>0)
            {                   
                $TripsArrayList=array();
                foreach($Tripsas as $singleTrip)
                {                   
                    $TripsArrayList[]=array('trip_id'=>$singleTrip->trip_id,'name'=>$singleTrip->name);         
                }                   
            }

あなたの出力は

Array
    (
      [0] => Array
                 (
                   [trip_id] => 1
                   [name] => Nashik
                 )
      [1] => Array
                 (
                   [trip_id] => 2
                   [name] => Puna
                 ) 
      [2] => Array
                 (
                   [trip_id] => 3
                   [name] => Mumbai
                 ) 
    )
3
Vikram Pote

これができると確信しています:

$trips = Trips::model()->findAll();
$arr = array();
foreach($trips as $t)
{
    $arr[$t->id] = $t->attributes;
}

モデルの主キーとして属性「id」があると仮定しています。

3
ZaQ

$array = CJSON::decode(CJSON::encode($model));を使用して、$ modelを$ arrayに変換します。

2
Ary Wibowo
$cats = Category::model()->findAll();
$count_cats = count($cats);
if($count_cats > 0){
    $arr_category = array();
    foreach($cats as $cat)
        array_Push($arr_category,$cat->attributes);
}
print_r($arr_category);

->結果

Array(
[0] => Array
    (
        [cat_id] => 2
        [title] => Đương đại
        [title_full] => Đương đại
        [desc] => 
        [alias] => duong-dai
        [p_id] => 0
        [type] => 1
        [status] => 1
        [sort_order] => 2
        [selected] => 0
    )
[1] => Array
    (
        [cat_id] => 164
        [title] => Nhiệt đới
        [title_full] => Nhiệt đới
        [desc] => 
        [alias] => nhiet-doi
        [p_id] => 0
        [type] => 1
        [status] => 1
        [sort_order] => 0
        [selected] => 0
    )
[...])
2
Vi Quang Hòa

すべての属性が必要であるという質問から、idでハッシュされたすべての属性を提供するよりコンパクトなソリューションであると仮定すると、CActiveRecordの 'attributes'疑似プロパティを次のように使用できます。

CHtml::listData(Trips::model()->findAll(), 'id', 'attributes')
2
Kostas Filios

配列にDAOを使用する

$array = Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();
1
Lari13

これにはCHtml :: listDataを使用しないでください。他の目的に使用する必要があります。 CDbCriteriaのindexプロパティが要件に適しています。

//1st option
Trips::model()->findAll(array('index'=>'trip_id'));

//2nd option
$c = new CDbCriteria();
$c->index = 'trip_id';
Trips::model()->findAll($c);
0
user3554259

単純に使用します:

$trips = Trips::model()->findAll();

$trips_array = CJSON::decode(CJSON::encode($trips));

注:これは良い方法ではありませんが、配列を返します

0
Engr. Saud