Yii model to array?

Joeeee picture Joeeee · Dec 14, 2010 · Viewed 85.7k times · Source

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

Answer

Rob Howard picture Rob Howard · Jan 2, 2011

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.