无法更新关联的cakephp3中有许多数据
我无法保存(更新)与主模型有许多关系的计算机的模型可用性的关联表单数据。我使用复选框更新了一些“可用性”选项。“不可用”字段。我加了id,但没什么区别。更新后的“汽车可用性”。数据库中未更新“不可用”字段。我没有得到错误,导师的主要模型数据也保存了 我查看了文档和过去的帖子,没有找到这个简单的任务。我做错了什么事无法更新关联的cakephp3中有许多数据,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我无法保存(更新)与主模型有许多关系的计算机的模型可用性的关联表单数据。我使用复选框更新了一些“可用性”选项。“不可用”字段。我加了id,但没什么区别。更新后的“汽车可用性”。数据库中未更新“不可用”字段。我没有得到错误,导师的主要模型数据也保存了 我查看了文档和过去的帖子,没有找到这个简单的任务。我做错了什么事 //controller $tutor = $this->Tutors->get($id, [ 'contain' => ['Availabili
//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
//请参阅“不可用”与“修补数据输出”不同也许这些方法中的一种可以帮助您,我想您需要更换
我用与您相同的方法尝试了它,但失败了,但使用link()它对我有效(对于HABTM)也许这些方法中的一种会帮助您,我想您需要更换
我用与您相同的方法尝试了它,但失败了,但使用link()它对我有效(对于HABTM)尝试插入
$tutor->dirty('availability\u for\u tutors',true)代码>控制器内部,在patchEntity
功能之后。
它会将您的关联标记为“脏”(已修改),以便在调用$this->Tutors->save
方法时可以保存它。尝试插入$tutor->dirty('availability\u for\u Tutors',true)代码>控制器内部,在patchEntity
功能之后。
I have 2 solutions
1st
public function edittest2($id = null)
{
$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']] );
// $tutor->dirty('availability_for_tutors', true);
// debug($tutor);
$this->Tutors->save($tutor,[
'atomic'=>false,
'validate' => false,
'associated' => ['AvailabilityForTutors']
]);
return $this->redirect(['action' => 'edittest2',$id]);
}
view
foreach ($tutor->availability_for_tutors as $key => $item) {
echo $this->Form->hidden('availability_for_tutors.'.$key.'.id', ['value'=>$item->id]);
echo $this->Form->input('availability_for_tutors.'.$key.'.not_available', ['label'=>$item->weekday,
'checked'=> $item->not_available,'type'=>'checkbox']);
}
2nd
public function edittest4($id = null)
$tutor = $this->Tutors->get($id, [
'contain' => ['AvailabilityForTutors']
]);
$availability=$tutor['availability_for_tutors'];
if ($this->request->is(['patch', 'post', 'put'])) {
$tutor = $this->Tutors->patchEntity($tutor, $this->request->data(),['validate' => false ] );
$this->Tutors->save($tutor);
$newavailability = $this->Tutors->AvailabilityForTutors->patchEntities( $availability,$tutor->AvailabilityForTutors, ['validate' => false]); //multiple entities
foreach ($newavailability as $key => $item) {
$result=$this->Tutors->AvailabilityForTutors->save($item, ['checkExisting' => false]);
if ( $result ){
$this->Flash->success(__('A lesson has been saved on .'));
}
else{
$this->Flash->error(__('There has been an error saving a lesson. Please, try again.'));
}//if
}//for each
return $this->redirect(['action' => 'edittest4',$id]);
}
view
///
foreach ($availability as $key => $item) {
// debug($item->toArray());
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']);
}
它会将您的关联标记为“脏”(已修改),以便在调用$this->Tutors->save
方法时可以保存该关联。您好,很抱歉,我插入了$tutor->dirty('availability\u for\u Tutors',true);就像你说的,什么都没有?关联模型上没有错误,也没有保存。这不应该这么复杂,但它是isHi,当我插入$tutor->dirty('availability\u for\u tutors',true)时,这不起作用;就像你说的,什么都没有?关联模型上没有错误,也没有保存。这不应该是这么复杂,但它是我不想要这个HABTM,因为我需要一个1到多,因为我有。我无法理解你的解决方案是什么对不起,因为我需要一个我想说的例子。我不想要这个HABTM,因为我需要一个1对多的。我无法理解您的解决方案是什么,很抱歉,因为我需要一个示例。您的实体在修补后会立即出现吗?保存这些可用性记录的表的名称和模式是什么?36、37和38是导师的id吗?调试中的补丁数据具有旧的可用性,然后此表再次出现,新值带有id正确字段(请参阅OP中的更新)。我真的需要这样做,我可以请一个例子。我发现很多人都有这个问题,我也试着用$this->Tutors->save($tutor,['atomic'=>false,'validate'=>false,'associated'=>['AvailabilityForTutors']它没有保存关联的数据在您的修补实体中有两个名称不同的数组,这就是它没有保存的原因。请注意,读取的数据上的实体名称是AvailabilityForTutor(单数).您的新数据有一个复数键。请尝试在表单中使用单数形式?此外,您只回答了我的三个问题中的一个…是的,如果视图中的小写字母适用于家庭教师,则有效。现在我有两个解决方案。您想到了第一个。我提出了两个解决方案。您的实体在修补后外观如何?名称和模式是什么这些可用性记录应该保存在哪个表中?36、37和38是导师的id吗?来自调试的修补数据具有旧的AvailabilityForTutors值,然后该表再次显示,带有id正确字段的新值(参见OP中的更新)。我真的需要这样做。我能举个例子吗?我看到很多人在这方面有问题。我也尝试过用$this->Tutors->save($tutor,['atomic'=>false,'validate'=>false,'associated'=>['AvailabilityForTutors']它没有保存关联的数据在您的修补实体中有两个名称不同的数组,这就是它没有保存的原因。请注意,读取的数据上的实体名称是AvailabilityForTutor(单数).您的新数据有一个复数键。请尝试在表单中使用单数?此外,您只回答了我的三个问题中的一个…是的,如果视图中的小写字母可供导师使用,则有效。现在我有两个解决方案。您想到了第一个。我提出了两个解决方案
I have 2 solutions
1st
public function edittest2($id = null)
{
$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']] );
// $tutor->dirty('availability_for_tutors', true);
// debug($tutor);
$this->Tutors->save($tutor,[
'atomic'=>false,
'validate' => false,
'associated' => ['AvailabilityForTutors']
]);
return $this->redirect(['action' => 'edittest2',$id]);
}
view
foreach ($tutor->availability_for_tutors as $key => $item) {
echo $this->Form->hidden('availability_for_tutors.'.$key.'.id', ['value'=>$item->id]);
echo $this->Form->input('availability_for_tutors.'.$key.'.not_available', ['label'=>$item->weekday,
'checked'=> $item->not_available,'type'=>'checkbox']);
}
2nd
public function edittest4($id = null)
$tutor = $this->Tutors->get($id, [
'contain' => ['AvailabilityForTutors']
]);
$availability=$tutor['availability_for_tutors'];
if ($this->request->is(['patch', 'post', 'put'])) {
$tutor = $this->Tutors->patchEntity($tutor, $this->request->data(),['validate' => false ] );
$this->Tutors->save($tutor);
$newavailability = $this->Tutors->AvailabilityForTutors->patchEntities( $availability,$tutor->AvailabilityForTutors, ['validate' => false]); //multiple entities
foreach ($newavailability as $key => $item) {
$result=$this->Tutors->AvailabilityForTutors->save($item, ['checkExisting' => false]);
if ( $result ){
$this->Flash->success(__('A lesson has been saved on .'));
}
else{
$this->Flash->error(__('There has been an error saving a lesson. Please, try again.'));
}//if
}//for each
return $this->redirect(['action' => 'edittest4',$id]);
}
view
///
foreach ($availability as $key => $item) {
// debug($item->toArray());
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']);
}