Ich kann verknüpfte Formulardaten für Modell AvailabilityForTutors nicht speichern (aktualisieren), die eine hasMany Beziehung mit dem primären Modell hat. Ich habe Checkboxen verwendet, um einige Optionen für die 'AvailabilityForTutors' zu aktualisieren. Nicht verfügbares Feld Ich fügte IDs hinzu, aber das machte keinen Unterschied. Der aktualisierte 'AvailabilityForTutors'. not_available 'Feld wird nicht in der Datenbank aktualisiert. Ich erhalte keinen Fehler und die primären Modelldaten für den Tutor werden gespeichert.cant aktualisieren verknüpfte hasMany Daten in CakePHP3
Ich habe die Dokumente und früheren Beiträge für diese einfache Aufgabe überprüft und ich kann es nicht bekommen. Ich mache etwas falsch.
//controller
$tutor = $this->Tutors->get($id, [
'contain' => ['AvailabilityForTutors']
]);
if ($this->request->is(['patch', 'post', 'put'])) {
debug($this->request->data);
$tutor = $this->Tutors->patchEntity($tutor, $this->request->data,['associated' => ['AvailabilityForTutors'],'validate' => false ]);
if ($this->Tutors->save($tutor)) {
$this->Flash->success(__('The tutor has been saved.'));
return $this->redirect(['action' => 'edittest2',$id]);
} else {
$this->Flash->error(__('The tutor could not be saved. Please, try again.'));
}
}
//view
<?php
echo $this->Form->hidden('id', ['value'=>$id]);
echo $this->Form->input('first_name',['label' => 'Tutor FirstName']);
echo $this->Form->input('last_name',['label' => 'Tutor LastName']);
foreach ($tutor->availability_for_tutors as $key => $item) {
echo $this->Form->hidden('AvailabilityForTutors.'.$key.'.id', ['value'=>$item->id]);
echo $this->Form->input('AvailabilityForTutors.'.$key.'.not_available', ['label'=>$item->weekday,
'checked'=> $item->not_available,'type'=>'checkbox']);
}
model tutor//
$this->hasMany('AvailabilityForTutors', [
'foreignKey' => 'tutor_id'
]);
posted data which is correct
'id' => '12',
'first_name' => 'fred',
'last_name' => 'Tow',
'AvailabilityForTutors' => [
(int) 0 => [
'id' => '36',
'not_available' => '1'
],
(int) 1 => [
'id' => '37',
'not_available' => '0'
],
(int) 2 => [
'id' => '38',
'not_available' => '0'
],
http://stackoverflow.com/questions/27398100/cakephp-3-0-cant-save-hasmany-associated-data
http://book.cakephp.org/3.0/en/orm/saving-data.html#saving-with-associations
http://stackoverflow.com/questions/35018335/update-a-hasmany-records
UPDATE- debug gepatchten Daten Objekt (App \ Modell \ Entity \ Tutor) {
'id' => (int) 12,
'tutor_inactive' => false,
'first_name' => 'fred2',
'last_name' => 'Tow2',
'availability_for_tutors' => [
(int) 0 => object(App\Model\Entity\AvailabilityForTutor) {
'id' => (int) 36,
'not_available' => false,
....
],
'AvailabilityForTutors' => [
(int) 0 => [
'id' => '36',
'not_available' => '1'
// not_available sehen ist, unterscheidet sich von patched Datenausgang
Sieht Ihre Entität direkt nach dem Patchen aus? Wie lautet der Name und das Schema der Tabelle, in der diese Verfügbarkeitsdatensätze gespeichert werden sollen? Sind 36, 37 und 38 die IDs von Tutoren? –
Die gepatchten Daten aus dem Debug haben die alten AvailabilityForTutors-Werte und dann erscheint diese Tabelle erneut mit den neuen Werten mit dem ID-korrekten Feld (siehe Update in OP). Ich brauche das wirklich, kann ich bitte ein Beispiel bekommen. Ich sehe eine Menge Leute haben Probleme mit dieser – ajt
Ich habe auch versucht, mit $ this-> Tutoren-> speichern ($ Tutor, [ 'atomic' => false, 'validate' => false, 'associated' = > ['AvailabilityForTutors'] Die zugehörigen Daten wurden nicht gespeichert – ajt