web-dev-qa-db-fra.com

Yii modèle à tableau?

Comment puis-je convertir le résultat de Trips::model()->findAll() en un tableau?

31
Joeeee

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.

24
oditiwebs.com

C'est pareil. 

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

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',
)
6
Abudayah
$model = Trips::model()->findAll(); 
$arr = CHtml::listData($model, 'trip_id', 'trip_name');
var_dump($arr);

CHtml :: listData () retournera une valeur de tableau.

4
user598031

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());
3
Ivan Smorodin

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
                 ) 
    )
3
Vikram Pote

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.

3
ZaQ

j'utilise $array = CJSON::decode(CJSON::encode($model)); pour convertir $ model en $ 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);

-> 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
    )
[...])
2
Vi Quang Hòa

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')
2
Kostas Filios

Utilisez DAO pour les tableaux

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

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);
0
user3554259

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

0
Engr. Saud