我目前正在学习Cake PHP并且遇到了一些我似乎无法克服的问题。如果有人可以提供任何建议,我们将不胜感激。
就我的问题而言,我有两个表:租户和子租户。
这是我的租户模特:
// app/Model/Tenant.php
class Tenant extends AppModel {
public $hasMany = 'SubTenants';
}
我在我的视图中有一个表单,允许一个租户和最多四个子租户一起输入。这是我的看法:(省略了其他非相关代码以简化)
<?php echo $this->Form->create('Tenant'); ?>
<?php echo $this->Form->input('full_name') ?>
<?php echo $this->Form->input('email') ?>
<?php echo $this->Form->input('SubTenants.0.full_name', array('label' => 'Full Name')) ?>
<?php echo $this->Form->input('SubTenants.0.email', array('label' => 'Full Name')) ?>
<?php echo $this->Form->input('SubTenants.1.full_name', array('label' => 'Full Name')) ?>
<?php echo $this->Form->input('SubTenants.1.email', array('label' => 'Full Name')) ?>
<?php echo $this->Form->input('SubTenants.2.full_name', array('label' => 'Full Name')) ?>
<?php echo $this->Form->input('SubTenants.2.email', array('label' => 'Full Name')) ?>
<?php echo $this->Form->input('SubTenants.3.full_name', array('label' => 'Full Name')) ?>
<?php echo $this->Form->input('SubTenants.3.email', array('label' => 'Full Name')) ?>
<?php echo $this->Form->end()?>
在租户控制器中,我使用saveAssociated保存这些数据,如下所示:
public function new_tenant() {
if ($this->request->is('post')) {
$this->Tenant->saveAssociated($this->request->data);
}
}
只要所有四个分租户表格完成,这项工作正常;但我需要子租户数据是可选的和/或可变的(有时可能少于四个子租户)
有人可以告诉我如何解决这个问题,是否可以使用saveAssociated来做到这一点?
提前致谢。
答案 0 :(得分:0)
如果保留代码并尝试保存子代理1和4,那么您将在2和3中获得验证错误(例如,如果您有&#34; notEmpty&#34;规则) 。如果您未在SubTenant模型中进行验证,则您将保存所有子承租人(1到4),但2和3将为空。
所以你必须改变你的代码。
public function new_tenant() {
if ($this->request->is('post')) {
$subsToSave = array();
foreach ($this->request->data['SubTenants'] as $index => $subtenant) {
if ($subtenant['fullname'] != '' && $subtenant['email'] != '')
$subsToSave[] = $subtenant;
}
$this->Tenant->saveAssociated(array('SubTenants'=>$subsToSave));
}
}
但是这样,数据验证不能保证属于同一主题。例如,如果您填写了子承租人1和4,并且您在两个名称上都添加了一个数字(假设您的数据验证不接受名称上的数字),那么使用第二个代码,表格错误可能会落在视图中的subtenant 1和2上。
嗯,无论哪种方式,一定要抓住保存时的错误,不要单独留下$this->Tenant->saveAssociated($this->request->data);
,如果出现保存错误会怎么样,你打算让它出现吗?通过而不是警告用户?