Comment puis-je convertir le résultat de Trips::model()->findAll()
en un tableau?
C'est la bonne façon de faire, il suit les conventions Yii
$trips = Trips::model()->findAll();
$arr = array();
foreach($trips as $t)
{
$arr[$t->id] = $t->attributes;
}
Ceci est utilisé lorsque vous avez des requêtes complexes, celles que vous trouvez difficiles à créer avec les conventions Yii.
Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();
Par exemple, lorsque vous devez transmettre toutes les données du modèle à un tableau. Vous ne pouvez pas le transmettre directement, car certaines informations de données ActiveRecord ne sont pas nécessaires.
C'est pareil.
$array = CHtml::listData(Trips::model()->findAll(), 'trip_id', 'trip_name');
Manière simple et facile: J'utilise listData () method pour créer des tableaux en menus déroulants, et je pense que cela va vous aider
code:
<?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);
?>
sortie:
array(
'1'=>'trip1',
'2'=>'trip2',
'3'=>'trip3',
)
$model = Trips::model()->findAll();
$arr = CHtml::listData($model, 'trip_id', 'trip_name');
var_dump($arr);
CHtml :: listData () retournera une valeur de tableau.
Vous pouvez créer des collections CMap continuer à travailler avec elle
$collections = new CMap();
foreach (YourModel::model()->findAll(['index' => 'id']) as $key => $row) {
$collections->add($key,$row->attributes);
}
var_dump($collections ->toArray());
Vous pouvez utiliser ceci.
$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);
}
}
Votre sortie sera
Array
(
[0] => Array
(
[trip_id] => 1
[name] => Nashik
)
[1] => Array
(
[trip_id] => 2
[name] => Puna
)
[2] => Array
(
[trip_id] => 3
[name] => Mumbai
)
)
Je suis sûr que tu peux faire ça:
$trips = Trips::model()->findAll();
$arr = array();
foreach($trips as $t)
{
$arr[$t->id] = $t->attributes;
}
Je suppose que l'attribut "id" est la clé primaire de votre modèle.
j'utilise $array = CJSON::decode(CJSON::encode($model));
pour convertir $ model en $ 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);
-> résultat
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
)
[...])
En supposant, à partir de votre question, que vous souhaitiez obtenir tous les attributs, une solution plus compacte vous donnant tous les attributs hachés par identifiant, vous pouvez utiliser la pseudo-propriété 'attributs' de CActiveRecord comme suit:
CHtml::listData(Trips::model()->findAll(), 'id', 'attributes')
Utilisez DAO pour les tableaux
$array = Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();
N'utilisez pas CHtml :: listData pour cela. Il doit être utilisé à d'autres fins . Il existe une propriété index de CDbCriteria qui convient à votre besoin.
//1st option
Trips::model()->findAll(array('index'=>'trip_id'));
//2nd option
$c = new CDbCriteria();
$c->index = 'trip_id';
Trips::model()->findAll($c);
Utilisez simplement:
$trips = Trips::model()->findAll();
$trips_array = CJSON::decode(CJSON::encode($trips));
Note: Ce n'est pas un bon moyen mais retourne un tableau