如何将Trips::model()->findAll()
的结果转换为数组?
答案 0 :(得分:34)
我在这里假设你只需要检索裸阵列,而不是任何相关的模型对象。
这样做:
$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列表,我就不会使用它。
<强>警告:强>
但是,如果这只是一个快速原型,请务必使用createCommand()
或findAll() - 循环示例。
答案 1 :(得分:25)
这是正确的方法,它遵循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 :(得分:13)
这是一样的。
$array = CHtml::listData(Trips::model()->findAll(), 'trip_id', 'trip_name');
答案 3 :(得分: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);
?>
输出:
array(
'1'=>'trip1',
'2'=>'trip2',
'3'=>'trip3',
)
答案 4 :(得分:4)
$model = Trips::model()->findAll();
$arr = CHtml::listData($model, 'trip_id', 'trip_name');
var_dump($arr);
CHtml :: listData()将返回一个数组值。
答案 5 :(得分:3)
我很确定你能做到这一点:
$trips = Trips::model()->findAll();
$arr = array();
foreach($trips as $t)
{
$arr[$t->id] = $t->attributes;
}
我假设您将属性“id”作为模型的主键。
答案 6 :(得分:3)
您可以创建 CMap 集合继续与她合作
$collections = new CMap();
foreach (YourModel::model()->findAll(['index' => 'id']) as $key => $row) {
$collections->add($key,$row->attributes);
}
var_dump($collections ->toArray());
答案 7 :(得分: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
)
)
答案 8 :(得分:2)
$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);
- &GT;结果
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
)
[...])
答案 9 :(得分:2)
假设您的问题需要所有属性,一个更紧凑的解决方案,为您提供所有按ID分类的属性,您可以使用CActiveRecord的'属性'伪表,如下所示:
CHtml::listData(Trips::model()->findAll(), 'id', 'attributes')
答案 10 :(得分:2)
我使用$array = CJSON::decode(CJSON::encode($model));
将$ model转换为$ array。
答案 11 :(得分:1)
将DAO用于数组
$array = Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();
答案 12 :(得分:0)
为此不要使用CHtml :: listData。它必须用于其他目的。 CDbCriteria有索引属性,适合您的要求。
//1st option
Trips::model()->findAll(array('index'=>'trip_id'));
//2nd option
$c = new CDbCriteria();
$c->index = 'trip_id';
Trips::model()->findAll($c);
答案 13 :(得分:0)
简单使用:
$trips = Trips::model()->findAll();
$trips_array = CJSON::decode(CJSON::encode($trips));
注意:这不是好方法,但会返回数组