我有以下表格:CakePHP的3 - 在關聯表數據的條件保存
- 預訂(hasOne會話)
- 會議(hasOne遊客職員)
- 遊客的工作人員
在我的表格中,我有如下輸入字段:
- 對於預訂相關字段,其表單輸入的ID爲
name
。 - 對於會話相關字段,其表單輸入的ID格式爲
session.name
。 - 對於來賓人員相關的領域,他們的表單輸入ID的形式是
session.gueststaff.name
。
然而,並非所有會話都有遊客的工作人員,所以我只想創造一個newEntity和數據保存到遊客的工作人員只有在各自的領域都填寫提交。目前,當我試圖與客戶提交工作人員輸入填寫,保存工作正常。但是,當我嘗試表單提交而沒有任何客人服務人員的輸入時,保存失敗。
控制器中的$ save調試給了我這個:false
,這不是很有幫助。
通過POST數據來看,來賓職員陣列處於這種形式(基本上是空的):
Guest Staff {
firstname:
lastname:
}
我然後試圖除去在MySQL中不爲空的要求,然後再重新蛋糕烘賓客人員模型。然而,當我在這之後嘗試重新提交表單時,表單可以保存時,仍然在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之前)。 –