【发布时间】:2017-03-08 11:49:08
【问题描述】:
我有以下表格:
- 预订(有一个会话)
- 会议(有一位来宾工作人员)
- 客座员工
在我的表单中,我有如下指定的输入字段:
- 对于 Bookings 相关字段,其表单输入的 ID 为
name的形式。 - 对于会话相关的字段,其表单输入的 ID 为
session.name的形式。 - 对于宾客员工相关字段,其表单输入的 ID 为
session.gueststaff.name表单。
但是,并非所有会话都有访客员工,因此我只想为访客员工创建一个 newEntity 并将数据保存到提交时,前提是他们的字段已填写。目前,当我尝试提交时填写访客员工输入在,保存工作正常。但是,当我尝试在未填写任何访客员工输入的情况下提交表单时,保存失败。
控制器中 $save 的调试只给了我这个:false,这不是很有帮助。
查看POST数据,Guest Staff数组是这样的形式(基本为空):
Guest Staff {
firstname:
lastname:
}
然后我尝试删除 MySQL 中的 Not Null 要求,然后重新 Cake Bake Guest Staff 模型。但是,当我在此之后尝试重新提交表单时,虽然表单能够保存,但仍在 Guest Staff 表中创建了一个新数据条目,其中只有一个 ID 和将其连接到 Sessions 的外键,而另一个字段是空白的,这不是我想要的,因为这意味着该表中会有很多无用的数据条目。
更新:根据 Manohar Khadka 的建议,我添加了一个 if 语句并取消设置。
目前在控制器中:
public function add()
{
if ($this->request->is('post')) {
$data = $this->request->data;
if(empty($data['session']['gueststaff']['firstname'])){
unset($data['session']['gueststaff']);
$booking = $this->Bookings->newEntity([
'associated' => [
'Sessions'
]
]);
} else {
$booking = $this->Bookings->newEntity([
'associated' => [
'Sessions', 'Sessions.Gueststaff'
]
]);
}
$booking = $this->Bookings->patchEntity($booking, $data, [
'associated' => [
'Sessions', 'Sessions.Gueststaff'
]
]);
$save = $this->Bookings->save($booking);
if ($save) {
$this->Flash->success(__('The booking was successfully completed.'));
return $this->redirect(['controller' => 'bookings', 'action' => 'index']);
} else {
$this->Flash->error(__('Unfortunately, the booking could not be completed. Please try again.'));
}
}
}
还有我的表格:
<?= $this->Form->create($booking) ?>
<legend><?= __('Session Details') ?></legend>
<?= $this->Form->input('session.location', ['class' => 'form-control']); ?>
<?= $this->Form->input('session.date', ['class' => 'form-control']); ?>
<h6>Warning: Fill in the following Guest Staff details if a Guest Staff member will be present.</h6>
<?= $this->Form->input('session.gueststaff.firstname', ['class' => 'form-control']); ?>
<?= $this->Form->input('session.gueststaff.lastname', ['class' => 'form-control']); ?>
<?= $this->Form->button('<strong>' . __('Complete Session Details') . '</strong>', ['id' => 'submit', 'class' => 'btn btn-primary']); ?>
<?= $this->Form->end() ?>
【问题讨论】:
-
我尝试了同样的方法,没有查看,并选择在另一个表单上添加可选数据,但是您可以在编辑和添加方法中检查它们,使用 $this->request->data 然后您可以取消设置如果实体为空(在 patchEntity 之前),则为实体。
标签: mysql forms cakephp associations cakephp-3.0