php – Yii2 – 以一种形式保存多个相关的ActiveRecord模型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – Yii2 – 以一种形式保存多个相关的ActiveRecord模型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1827字,纯文字阅读大概需要3分钟。
内容图文
![php – Yii2 – 以一种形式保存多个相关的ActiveRecord模型](/upload/InfoBanner/zyjiaocheng/818/185c4380463c40118ea3ccf27ad53c42.jpg)
这是表结构:
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的属性描述.这是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:
我在下面的广告代码字段:
<?= $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来映射BaseTable和ChildTable的所有属性.但是我想知道有没有一个快速的解决方案来实现基于gii生成的代码保存多个相关的ActiveRecord模型?谢谢!
解决方法:
这个:
<?= $form->field($model->baseTable, 'description')->textInput() ?>
应该工作,因为baseTable是正确的关系名称.相关记录根本不存在(从错误中可以看出它是空的).
它可以是与先前关系的不正确填充相关的错误,也可以是关系.
在后一种情况下,您需要在访问和显示之前检查它是否存在(换句话说为空).
这个:$model-> getBaseTable() – > one()没有任何意义,因为它等于$model-> baseTable.你不应该这样称呼关系.
关于点符号的方式 – 它在这里不起作用.
要加载和保存多个记录,您可以使用:
> loadMultiple()
> validateMultiple()
然后只需在循环中调用save().
内容总结
以上是互联网集市为您收集整理的php – Yii2 – 以一种形式保存多个相关的ActiveRecord模型全部内容,希望文章能够帮你解决php – Yii2 – 以一种形式保存多个相关的ActiveRecord模型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。