나는 다음과 같은 테이블이 있습니다CakePHP의 3 - 관련 테이블의 데이터의 조건 절약
- 예약 (hasOne의 세션)
- 세션 (hasOne의 고객 직원)
- 고객 직원
을 내 양식에는 다음과 같이 지정된 입력 필드가 있습니다.
- 예약 관련 필드의 경우 양식 입력 ID는
name
입니다. - 세션 관련 입력란의 양식 입력 ID는
session.name
의 형식입니다. - 게스트 스태프 관련 필드의 경우 양식 입력 ID의 형식은
session.gueststaff.name
입니다.
그러나 모든 세션에 게스트 스탭이있는 것은 아니므로 필드에 입력 한 경우에만 newEntity를 만들고 제출할 때 게스트 스탭에게 데이터를 저장하려고합니다. 현재 게스트와 함께 제출을 시도하면 직원 입력이 채워지면 저장이 잘됩니다. 그러나 게스트 스탭 입력이 채워지지 않고 양식을 제출하려고하면 저장이 실패합니다.
컨트롤러에서 $ save 디버그를하면 다음과 같이 나타납니다. false
이것은별로 도움이되지 않습니다. 그때 그때 다시 케이크 구워을 MySQL의에서 NOT NULL 요구 사항을 제거하려고 시도
Guest Staff {
firstname:
lastname:
}
: POST 데이터를 통해 찾고
는, 게스트 직원 배열이의 형태 (기본적으로 비어 있음)에 게스트 스탭 모델 그러나 양식을 저장할 수있는 동안이 양식을 다시 제출하려고 시도했을 때 ID와 외래 키를 세션에 연결 한 상태로 Guest 스태프 테이블에 새로운 데이터 항목이 만들어졌지만 필드가 공백이었습니다. 이는 내가 원했던 것이 아닙니다. 그 테이블에 많은 쓸모없는 데이터 항목이 있다는 뜻입니다.
업데이트 : 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를 사용하여 편집하고 추가 할 수있다. 그런 다음 엔터티를 해제 할 수있다. empty (patchEntity 이전). –