Как преобразовать результат Trips::model()->findAll()
в массив?
Модель Yii для массива?
Ответ 1
Я исхожу из предположения, что вам нужно только получить только голые массивы, а не любые связанные объекты модели.
Это будет сделано:
$model = Trips::model();
$trips = $model->getCommandBuilder()
->createFindCommand($model->tableSchema, $model->dbCriteria)
->queryAll();
Это похоже на примеры Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();
, за исключением:
-
Он спросит модель для имени таблицы; вам не нужно будет писать имя таблицы как в модели, так и в запросе.
-
Сначала вы можете вызвать функции scoping на
$model
, например.$model = Trips::model()->short()->destination('Austin, TX');
Это означает, что вы можете использовать существующие существующие ярлыки запросов вместо того, чтобы напрямую помещать их в запрос.
Напротив, $trips = Trips::model()->findAll();
(используя foreach) немного расточительно, поскольку вы вытягиваете строки из базы данных, настраиваете кучу объектов и затем бросаете их все. Он будет отлично работать для небольших результирующих наборов, но я бы не использовал это, если вы смотрите на длинный список поездок.
Протест:
Однако, если это просто быстрый прототип, используйте примеры createCommand()
или findAll() - и-loop.
Ответ 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, которые вам не нужны.
Ответ 3
Это то же самое.
$array = CHtml::listData(Trips::model()->findAll(), 'trip_id', 'trip_name');
Ответ 4
Простой и простой способ: я использую 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',
)
Ответ 5
$model = Trips::model()->findAll();
$arr = CHtml::listData($model, 'trip_id', 'trip_name');
var_dump($arr);
CHtml:: listData() вернет значение массива.
Ответ 6
Я уверен, что вы можете это сделать:
$trips = Trips::model()->findAll();
$arr = array();
foreach($trips as $t)
{
$arr[$t->id] = $t->attributes;
}
Я предполагаю, что у вас есть атрибут 'id' в качестве первичного ключа модели.
Ответ 7
Вы можете создавать коллекции CMap продолжать работать с ней
$collections = new CMap();
foreach (YourModel::model()->findAll(['index' => 'id']) as $key => $row) {
$collections->add($key,$row->attributes);
}
var_dump($collections ->toArray());
Ответ 8
Вы можете использовать это.
$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
)
)
Ответ 9
$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
)
[...])
Ответ 10
Предполагая, что из вашего вопроса, что вы хотите все атрибуты, более компактное решение, дающее вам все атрибуты хэшированные по id, вы можете использовать псевдоприбор атрибутов CActiveRecord следующим образом:
CHtml::listData(Trips::model()->findAll(), 'id', 'attributes')
Ответ 11
Я использую $array = CJSON::decode(CJSON::encode($model));
для преобразования $model в $array.
Ответ 12
Использовать DAO для массивов
$array = Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll();
Ответ 13
Не используйте CHtml:: listData для этого. Он должен использоваться для других целей. Существует свойство index для CDbCriteria, которое подходит для вас.
//1st option
Trips::model()->findAll(array('index'=>'trip_id'));
//2nd option
$c = new CDbCriteria();
$c->index = 'trip_id';
Trips::model()->findAll($c);