Yii2 - 与数组关系的ActiveRecord

时间:2017-09-12 10:52:20

标签: yii2

我知道有使用asArray()的答案 但是如果我需要同时关系和数组的模型怎么办呢?

在这个例子中,demoJson没有关系:

$demo = Demo::find()->with('bundles')->one();

// view
<?= var demoJson = json_encode($demo) ?> <!-- Using as array ERROR -->
<?= $demo->bundles[0]->someFunc() ?> <!-- Using model OK -->


在这个例子中没有someFunc(),因为使用了一个简单的数组:

$demo = Demo::find()->with('bundles')->asArray()->one();

// view
<?= var demoJson = json_encode($demo) ?> <!-- Using as array OK -->
<?= $demo['bundles'][0]->someFunc() ?> <!-- Using model ERROR -->


那么,如何从模型中获取所有关系但不使用asArray的数组。

1 个答案:

答案 0 :(得分:0)

您可以尝试:

$demo = Demo::find()->with('bundles')->limit(1)->one();

// view
<?= var demoJson = json_encode($demo->toArray()) ?>
<?= $demo->bundles[0]->someFunc() ?>

Demo模型可能是这样的:

namespace app\models;

use yii\db\ActiveRecord;

Class Demo extends ActiveRecord
{
    // ...

    /**
     * @return array
     */
    public function fields()
    {
        $fields = parent::fields();

        if ($this->isNewRecord) {
            return $fields;
        }

        $fields['bundles'] = function() {
            $bundles = [];

            foreach ($this->bundles as $bundle) {
                $bundles[] = $bundle->toArray();
            }

            return $bundles;
        }

        return $fields;
    }
}