Trips::model()->findAll()
の結果を配列に変換するにはどうすればよいですか?
ここでは、関連するモデルオブジェクトではなく、ベアアレイのみを取得する必要があると仮定します。
これはそれを行います:
_$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の例を必ず使用してください。
これは正しい方法で、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データ情報を渡すため、直接渡すことはできません。
これは同じです。
$array = CHtml::listData(Trips::model()->findAll(), 'trip_id', 'trip_name');
簡単で簡単な方法: 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',
)
$model = Trips::model()->findAll();
$arr = CHtml::listData($model, 'trip_id', 'trip_name');
var_dump($arr);
CHtml :: listData()は配列値を返します。
コレクションを作成できますCMap彼女との作業を続けます
$collections = new CMap();
foreach (YourModel::model()->findAll(['index' => 'id']) as $key => $row) {
$collections->add($key,$row->attributes);
}
var_dump($collections ->toArray());
これを使用できます。
$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
)
)
これができると確信しています:
$trips = Trips::model()->findAll();
$arr = array();
foreach($trips as $t)
{
$arr[$t->id] = $t->attributes;
}
モデルの主キーとして属性「id」があると仮定しています。
$array = CJSON::decode(CJSON::encode($model));
を使用して、$ modelを$ arrayに変換します。
$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
)
[...])
すべての属性が必要であるという質問から、idでハッシュされたすべての属性を提供するよりコンパクトなソリューションであると仮定すると、CActiveRecordの 'attributes'疑似プロパティを次のように使用できます。
CHtml::listData(Trips::model()->findAll(), 'id', 'attributes')
配列にDAOを使用する
$array = Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();
これには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);
単純に使用します:
$trips = Trips::model()->findAll();
$trips_array = CJSON::decode(CJSON::encode($trips));
注:これは良い方法ではありませんが、配列を返します