Yii2-与数组有关系的ActiveRecord
我知道使用asArray()是有答案的。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() ?&
但是如果我同时需要关系和数组的模型呢?
在此示例中,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;
}
}