Yii model to array?

前端 未结 14 1756
南笙
南笙 2020-12-08 19:32

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

14条回答
  •  时光说笑
    2020-12-08 20:13

    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.

提交回复
热议问题