Yii模型到阵列?

Joe*_*eee 31 arrays model yii

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

Rob*_*ard 34

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

这样做:

$model = Trips::model();
$trips = $model->getCommandBuilder()
               ->createFindCommand($model->tableSchema, $model->dbCriteria)
               ->queryAll();
Run Code Online (Sandbox Code Playgroud)

这就像Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();示例,除了:

  • 它会询问模型的表名; 您不需要在模型和查询中编写表名.

  • 您可以先调用作用域函数$model,例如.
    $model = Trips::model()->short()->destination('Austin, TX');
    这样做意味着您可以使用模型的现有查询快捷方式,而不是直接将它们放入查询中.

相比之下,$trips = Trips::model()->findAll();(使用foreach)有点浪费,因为你从数据库中提取行,设置一堆对象,然后将它们全部丢弃.它适用于小型结果集,但如果您查看一长串Trips,我就不会使用它.

警告:
如果这只是一个快速原型,但无论如何都要使用createCommand()或者findAll()和循环示例.


odi*_*com 25

这是正确的方法,它遵循Yii惯例

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

当您遇到复杂查询时,会使用此选项,这些查询很难使用Yii约定创建.

Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();
Run Code Online (Sandbox Code Playgroud)

例如,当您需要将模型中的所有数据传递给数组时.您无法直接传递它,因为它传递了您不需要的一些ActiveRecord数据信息.


小智 13

这是一样的.

$array = CHtml::listData(Trips::model()->findAll(), 'trip_id', 'trip_name');
Run Code Online (Sandbox Code Playgroud)

  • `trips :: model() - > findAll()`结合`listData()`(对模型进行预测)有点浪费,因为你从数据库中提取行,设置把一堆物品扔掉,然后将它们扔掉. (9认同)

Abu*_*yah 6

简单方便:我使用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);
?>
Run Code Online (Sandbox Code Playgroud)

输出:

array(
 '1'=>'trip1',
 '2'=>'trip2',
 '3'=>'trip3',
)
Run Code Online (Sandbox Code Playgroud)


Lar*_*i13 1

对数组使用 DAO

$array = Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();
Run Code Online (Sandbox Code Playgroud)