Forms CakePHP 3-patchEntities()的表单数据格式

Forms CakePHP 3-patchEntities()的表单数据格式,forms,cakephp,orm,cakephp-3.0,Forms,Cakephp,Orm,Cakephp 3.0,我的问题很简单:表单数据应该是什么样的(例如名称键应该是什么样的)来使用patchEntities()? 我读过 ,但它没有明确提到如何使用它 此结构适用于newEntities(): 以如下形式: <?= $this->Form->input('0.field1', /* ... */) ?> <?= $this->Form->input('1.field1', /* ... */) ?> ... ... 但是,具有'id.field1'的

我的问题很简单:表单数据应该是什么样的(例如名称键应该是什么样的)来使用
patchEntities()

我读过 ,但它没有明确提到如何使用它

此结构适用于
newEntities()

以如下形式:

<?= $this->Form->input('0.field1', /* ... */) ?>
<?= $this->Form->input('1.field1', /* ... */) ?>
...

...

但是,具有
'id.field1'
的相同结构不会对
patchEntities()

中的实体进行任何更改表单数据应看起来相同,但应包括记录主键,以便封送拆收器可以映射相应记录上的数据。表单输入中的前导数字不是主键(id),而是结果数组索引

文档也可以使用一些更新来包含
patchEntities()
,现在“Patching HasMany and belongtomany”部分中只隐藏了一小段

因此,表单应该类似于:

<?= $this->Form->input('0.id', /* ... */) ?>
<?= $this->Form->input('0.field1', /* ... */) ?>
<?= $this->Form->input('1.id', /* ... */) ?>
<?= $this->Form->input('1.field1', /* ... */) ?>
<!-- ... -->
然后可以在给定实体上进行修补:

$original = $this->Table->find()->toArray();
$patched = $this->Table->patchEntities($original, $data);

不确定您想要什么,对于这个“'id.field1'”,id应该是数组键,这样您将有多个子数组,然后您可以将其转换为实体感谢@ndm,这正好回答了我的问题。遗憾的是,model
->save()
函数不支持多个实体。
$data = [
    '0' => ['id' => '...', 'field1' => '...', /* ... */],
    '1' => ['id' => '...', 'field1' => '...', /* ... */],
    // ...
];
$original = $this->Table->find()->toArray();
$patched = $this->Table->patchEntities($original, $data);