gpt4 book ai didi

php - Yii2 - 以一种形式保存多个相关的 ActiveRecord 模型

转载 作者:可可西里 更新时间:2023-10-31 22:42:15 25 4
gpt4 key购买 nike

表结构如下:

Table BaseTable
id (primary key) INT
description VARCHAR(255)

Table ChildTable
id (primary key)(foreign key reference to BaseTable) INT
child_property VARCHAR(255)

其实就是数据库表中的一种继承关系。

然后我使用 gii 为两者生成具有关系函数的模型,并为 ChildTable 生成 CRUD 操作。这是 ChildTable 中的关系函数:

public function getBaseTable()
{
return $this->hasOne(BaseTable::className(), ['id' => 'id']);
}

在生成的 ChildTable 表格中,我想更新它的 BaseTable 的属性 description。这是 ChildTable 的原始形式:

<?php $form = ActiveForm::begin(); ?>

<?= $form->field($model, 'child_property')->textInput() ?>

<?php ActiveForm::end(); ?>

尝试 1:

我在下面添加代码字段:

<?= $form->field($model, 'baseTable.description')->textInput() ?>

我遇到了这个错误:

Getting unknown property: app\models\ChildTable::baseTable.description

尝试 2:

I 广告代码字段如下:

<?= $form->field($model->baseTable, 'description')->textInput() ?>

我遇到了另一个错误:

Call to a member function formName() on null

尝试 3:

我使用关系获取BaseTable模型,代码如下:

<?= $form->field($model->getBaseTable()->one(), 'description')->textInput() ?>

我仍然遇到错误:

Call to a member function formName() on null

想法:

我想到可以创建一个新的 viewModel 来映射 BaseTableChildTable 中的所有属性。但是我想知道是否有一个快速的解决方案来实现基于gii生成的代码保存多个相关的ActiveRecord模型?谢谢!

最佳答案

这个:

<?= $form->field($model->baseTable, 'description')->textInput() ?>

应该可以工作,因为 baseTable 是正确的关系名称。相关记录根本不存在(它是 null,您可以从错误中看到)。

它可能是与先前关系的错误填充相关的错误,也可能是关系是可选的。

在后一种情况下,您需要在访问和显示之前检查它是否存在(换句话说是 null)。

这:$model->getBaseTable()->one() 没有任何意义,因为它等于 $model->baseTable。你不应该这样调用关系。

关于点符号的方式 - 它在这里不起作用。

要加载和保存多条记录,您可以使用:

然后在循环中调用save()

关于php - Yii2 - 以一种形式保存多个相关的 ActiveRecord 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com