Yii中的相关表格

Posted

技术标签:

【中文标题】Yii中的相关表格【英文标题】:Related forms in Yii 【发布时间】:2014-09-26 10:29:54 【问题描述】:

我试图将相关的表单字段嵌入到我的主表单中。但我得到异常Array to string conversion。我认为那是因为我建立了一个 HAS_MANY 关系。因为当关系 HAS_ONE 时,表格可以正常工作。那么如何从具有 HAS_MANY 关系的表(模型)中获取字段。 这是关系:

用户模型:

'address' => array(self::HAS_MANY, 'Address', 'user_id'),

地址模型:

'user' => array(self::BELONGS_TO, 'User', 'user_id'),

部分表格:

<div class="row">
    <?php echo $form->labelEx($model->address,'phone'); ?>
    <?php echo $form->textField($model->address,'phone',array('size'=>60,'maxlength'=>255)); ?>
    <?php echo $form->error($model,'phone'); ?>
</div>

【问题讨论】:

HAS_MANY 返回多维数组.ex。 array(0=&gt;array('phone'=&gt;'xyz'));。尝试使用$model-&gt;address[0] 显示错误:Undefined offset: 0 您能否使用有问题的var_dump($model-&gt;address) 添加地址数组的转储。这将有助于了解它返回的内容。 【参考方案1】:

HAS_MANY 关系将在您的用户模型中创建一个地址数组。

在 AR 中声明关系涉及覆盖关系() CActiveRecord 的方法。该方法返回一个关系数组 配置。每个数组元素代表一个关系 格式如下:

因此,如果您想要用户的所有地址,请使用 $model-&gt;address,如下所示:

$allAddress = $model->address;
foreach($allAddress in $address)
//@address =  New Address()
//Do some stuff here with your address

但是,如果您要创建一个新用户,并为您的用户添加一个新地址,则在地址之前创建用户。

$UserModel = new User();
$UserModel->attribute = $userData;
$UserModel->Save();

$AddressModel-> new Address();
$AddressModel->attribute = $addressData;
$AddressModel->user_id = $userModel->id;
$AddressModel->save();

$AddressModel2-> new Address();
$AddressModel2->attribute = $addressData2;
$AddressModel2->user_id = $userModel->id;
$AddressModel2->save();

有关 yii 中关系的更多信息,请阅读this article。

要创建包含多个模型的表单,请查看 this article。

【讨论】:

以上是关于Yii中的相关表格的主要内容,如果未能解决你的问题,请参考以下文章

Yii2动态表格wbraganca复制值到克隆字段[重复]

yii2框架添加扩展类

yii2 Excel电子表格(xlsx格式)文件上传验证

Yii2的gridView的footer是怎么用的,我想实现表格最后有个汇总金额

Yii2的相关学习记录,后台模板和gii

Yii 2 ArrayDataProvider的一些心得