在 Cakephp 中保存对关联实体的手动更改 3.x
Saving manual changes to associated entities in Cakephp 3.x
我正在尝试保存实体并在此过程中更改其关联数据中的某些属性。我以为这行得通,但显然行不通:
$user = $this->Users->get(2, ['contain' => 'Spots']);
$user->name = "newUserName";
$user->spots[2]->name = 'newSpotName';
$this->Users->save($user);
用户名保存的很好,但是点名没有。
我能找到的所有问题都与正在保存的数据有关。谁能告诉我我做错了什么?
请参考https://book.cakephp.org/3.0/en/orm/saving-data.html#saving-associations
$this->Users->save($user, ['associated' => ['Spots']]);
我希望这对你有用。
预祝好运
手动更改关联实体时(与使用 Table::patchEntity()
相反),您必须确保关联的相应 属性 名称被标记为脏(仅脏 entities/properties 正在保存)。
所以在你的情况下 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);
另见
我正在尝试保存实体并在此过程中更改其关联数据中的某些属性。我以为这行得通,但显然行不通:
$user = $this->Users->get(2, ['contain' => 'Spots']);
$user->name = "newUserName";
$user->spots[2]->name = 'newSpotName';
$this->Users->save($user);
用户名保存的很好,但是点名没有。
我能找到的所有问题都与正在保存的数据有关。谁能告诉我我做错了什么?
请参考https://book.cakephp.org/3.0/en/orm/saving-data.html#saving-associations
$this->Users->save($user, ['associated' => ['Spots']]);
我希望这对你有用。
预祝好运
手动更改关联实体时(与使用 Table::patchEntity()
相反),您必须确保关联的相应 属性 名称被标记为脏(仅脏 entities/properties 正在保存)。
所以在你的情况下 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);
另见