首页 文章

Yii模型到阵列?

提问于
浏览
31

如何将 Trips::model()->findAll() 的结果转换为数组?

14 回答

  • 25

    我在这里假设您只需要检索裸阵列,而不是任何关联的模型对象 .

    这样做:

    $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)有点浪费,因为你可以很好地处理小的结果集,但是我不会看到很长的Trips列表 .

    Caveat:
    但是,如果这只是一个快速原型,请务必使用 createCommand() 或findAll() - 循环示例 .

  • 2

    这是正确的方法,它遵循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数据信息 .

  • 2

    这是一样的 .

    $array = CHtml::listData(Trips::model()->findAll(), 'trip_id', 'trip_name');
    
  • 2

    简单方便:我使用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',
    )
    
  • 3
    $model = Trips::model()->findAll(); 
    $arr = CHtml::listData($model, 'trip_id', 'trip_name');
    var_dump($arr);
    

    CHtml :: listData()将返回一个数组值 .

  • 34

    我很确定你能做到这一点:

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

    我假设您将属性“id”作为模型的主键 .

  • 0

    您可以创建集合 CMap 继续与她合作

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

    你可以用它 .

    $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
    $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
        )
    [...])
    
  • 6

    从你的问题中假设你想要所有的属性,一个更紧凑的解决方案为你提供所有属性哈希值,你可以使用CActiveRecord的'属性'伪表,如下所示:

    CHtml::listData(Trips::model()->findAll(), 'id', 'attributes')
    
  • 4

    我使用 $array = CJSON::decode(CJSON::encode($model)); 将$ model转换为$ array .

  • 1

    将DAO用于数组

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

    不要使用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);
    
  • 13

    使用简单:

    $trips = Trips::model()->findAll();
    
    $trips_array = CJSON::decode(CJSON::encode($trips));
    

    Note: 这不是好方法但返回数组

相关问题