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)
简单方便:我使用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)
对数组使用 DAO
$array = Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();
Run Code Online (Sandbox Code Playgroud)