cakephp 3如何从现有实体创建新记录

m528fe3b  于 2022-11-11  发布在  PHP
关注(0)|答案(3)|浏览(178)

我有一个包含相关数据的实体,我想将其保存在新记录中。
我试试看:

$newTour = $this->Tours->get($id, ['contain' => ['Cities', 'Tags']]);
$newTour->set('id', null);
$this->Tours->save($newTour);

但我看到了这个错误:
更新时需要所有主键值
我该怎么办?

laik7k3q

laik7k3q1#

通过get()find()检索的实体将被设置为非新实体,这将导致它们在保存时在更新过程中结束,而不是在插入过程中结束。
如果要将它们作为新记录插入,则除了取消设置主键之外,还必须将它们标记为新记录。

// ...
$newTour->isNew(true);
$newTour->unsetProperty('id');
// ...

另请参阅

*Cookbook〉数据库访问和ORM〉保存数据〉保存实体
*操作手册〉数据库访问和ORM〉保存数据〉更新数据
*API〉\蛋糕\数据源\实体特性::isNew()

hgb9j2n6

hgb9j2n62#

请使用$newTour->unsetProperty('id');而不是$newTour->set('id', null);取消设置该属性

5tmbdcev

5tmbdcev3#

一个重要的细节是,当我们有关联的表时,用
->contain()选项
,我们需要对每一个递归执行相同的操作,如下所示:

$newTour->isNew(true);
 $newTour->unsetProperty('id');
 $newTour->other_table->isNew(true);
 $newTour->other_table->unsetProperty('id');

相关问题