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=>array('phone'=>'xyz'));
。尝试使用$model->address[0]
显示错误:Undefined offset: 0
您能否使用有问题的var_dump($model->address)
添加地址数组的转储。这将有助于了解它返回的内容。
【参考方案1】:
HAS_MANY
关系将在您的用户模型中创建一个地址数组。
在 AR 中声明关系涉及覆盖关系() CActiveRecord 的方法。该方法返回一个关系数组 配置。每个数组元素代表一个关系 格式如下:
因此,如果您想要用户的所有地址,请使用 $model->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中的相关表格的主要内容,如果未能解决你的问题,请参考以下文章