Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Yii model to array?

Tags:

arrays

model

yii

How can I convert the result of Trips::model()->findAll() to an array?

like image 686
Joeeee Avatar asked Dec 14 '10 04:12

Joeeee


2 Answers

I'm going on the assumption here that you only need to retrieve just the bare arrays, and not any associated model objects.

This will do it:

$model = Trips::model(); $trips = $model->getCommandBuilder()                ->createFindCommand($model->tableSchema, $model->dbCriteria)                ->queryAll(); 

This is like the Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll(); examples, except:

  • It'll ask the model for the table name; you won't need to write the table name in both the model and the query.

  • You can call scoping functions on $model first, eg.
    $model = Trips::model()->short()->destination('Austin, TX');
    Doing this means you can use the model's existing query shortcuts, instead of putting them in the query directly.

In contrast, the $trips = Trips::model()->findAll(); (using foreach) is a bit wasteful, in that you're pulling the rows from the database, setting up a bunch of objects, and then throwing them all away. It'll work fine for small result sets, but I wouldn't use that if you're looking at a long list of Trips.

Caveat:
If this is just a quick prototype, though, by all means use the createCommand() or findAll()-and-loop examples.

like image 87
Rob Howard Avatar answered Oct 03 '22 20:10

Rob Howard


This is the right way to do, it follows Yii conventions

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

This is used when you have complex queries, those you find difficult to create with Yii conventions.

Yii::app()->db->createCommand('SELECT * FROM tbl')->queryAll(); 

For example, when you need to pass all the data from the model to an array. You cannot pass it directly as it does pass some ActiveRecord data information that you don't need.

like image 21
Simer Twilio Toronto developer Avatar answered Oct 03 '22 20:10

Simer Twilio Toronto developer