我试图保存一个实体,并在此过程中更改其关联数据中的某些属性。我以为这样可以,但是显然不行:
$user = $this->Users->get(2, ['contain' => 'Spots']);
$user->name = "newUserName";
$user->spots[2]->name = 'newSpotName';
$this->Users->save($user);
保存的用户名称很好,但是现货名称不是。
我能够找到的所有问题都与保存的数据有关。有人可以告诉我我在做什么错吗?
答案 0 :(得分:1)
手动更改关联的实体时(与使用Table::patchEntity()
相对),必须确保将关联的相应属性名称标记为脏(仅保存脏实体/属性)。
因此,在您的情况下,User::$spots
应该很脏:
// ...
$user->spots[2]->name = 'newSpotName';
$user->setDirty('spots', true); // dirty() in CakePHP < 3.4
如果实体需要更深入地嵌套,例如$user->foo->bar->spots
,则该链中的所有属性都必须是肮脏的:
$user->foo->bar->spots[2]->name = 'newSpotName';
$user->foo->bar->setDirty('spots', true);
$user->foo->setDirty('bar', true);
$user->setDirty('foo', true);
另请参见
答案 1 :(得分:-1)
请参考https://book.cakephp.org/3.0/en/orm/saving-data.html#saving-associations
$this->Users->save($user, ['associated' => ['Spots']]);
我希望这对您有用。
最好的运气。