Yii2-与数组有关系的ActiveRecord

Yii2-与数组有关系的ActiveRecord,yii2,Yii2,我知道使用asArray()是有答案的。 但是如果我同时需要关系和数组的模型呢? 在此示例中,demoJson没有关系: $demo = Demo::find()->with('bundles')->one(); // view <?= var demoJson = json_encode($demo) ?> <!-- Using as array ERROR --> <?= $demo->bundles[0]->someFunc() ?&

我知道使用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 -->
$demo=demo::find()->with('bundles')->one();
//看法

在本例中没有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 -->
$demo=demo::find()->with('bundles')->asArray()->one();
//看法

因此,如何从模型中获取数组及其所有关系,但不使用asArray。

您可以尝试:

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

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

$demo->toArray()没有来自关系的数据(如示例1)@holden321您必须重写演示模型中的fields函数。我的电脑刚刚关机,我想稍后再发布我的答案。@holden321我已经编辑了我的答案。如果有什么不对劲,请告诉我。
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;
    }
}