Update a HasMany records

醉酒当歌 提交于 2019-12-23 05:07:52

问题


I am converting a working app from cakephp2 to cakephp3. I'm struggling to get a form that updates hasMany records to work.

The app has the following structure:

MODELS:

use Cake\ORM\Table;
use Cake\Validation\Validator;

class AwardsTable extends Table
{
  public function initialize(array $config)
  {
   $this->hasMany('Levels', ['sort' => 'sort_order']);
  }
}


namespace App\Model\Entity;
use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

class Award extends Entity
{
  protected $_accessible = [
    'name'            =>  true,
    'url'             =>  true,
    'organisation'    => true,
    'detail'          =>  true,
    'logo'            =>  true,
    'levels'          =>  true,
    'Levels'          =>  true
   ];

}

IN THE FORM:

<?= $this->Form->input("levels.$i.name",  'label'=>false,'type'=>'text','value' => $award->name]);?>
<?= $this->Form->input("levels.$i.id", ['value' => $award->id]); ?>

CONTROLLER

$this->Awards->patchEntity($award, $this->request->data, ['associated' => ['Levels']]);         
if ($this->Awards->save($award)) {
    $this->Flash->success(__('Your Award has been saved.'));
    $this->redirect(['action' => 'index']);
}

This seems inline with what is recommended here: http://book.cakephp.org/3.0/en/views/helpers/form.html#associated-form-inputs

I've tried a few variations with capitalisation & pluralisation. The award data saves correctly but the associated levels data does not save.

What am I missing to get the has_many association data to save?

EDIT: Example Data array submitted:

    2016-01-28 23:32:56 Error: Array
(
    [id] => 4
    [name] => test award
    [organisation] => test org
    [url] => http://www.example.com
    [detail] => 
    [levels] => Array
        (
            [0] => Array
                (
                    [name] => test 1
                    [id] => 4
                )

            [11] => Array
                (
                    [name] => test
                    [id] => 16
                )

        )

    [image] => Array
        (
            [name] => 
            [type] => 
            [tmp_name] => 
            [error] => 4
            [size] => 0
        )

)

回答1:


In LevelEntity verify if 'id' is accessible

protected $_accessible = [
    '*' => true,
    'id' => true,
];


来源:https://stackoverflow.com/questions/35018335/update-a-hasmany-records

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!