Klonowanie encji wraz z zależnościami w CakePHP
Pokażę jak klonować encję wraz z zależnościami w CakePHP 3. Najpierw pobież obiekt, który chcesz sklonować wraz z zależnościami.
$article = $this->Articles->get($id, [ 'contain' => [ 'Packages', 'Tags' ] ]);
$newArticleData = $article->toArray(); unset($newArticleData['id']); unset($newArticleData['created']); unset($newArticleData['modified']); foreach ($newArticleData['packages'] as $key => $package) { unset($newArticleData['packages'][$key]['id']); } foreach ($newArticleData['tags'] as $key => $tag) { unset($newArticleData['tags'][$key]['id']); }Pozostało już tylko utworzyć nową pustą encję, przekonwertować dane i przekazać je metodzie patchEntity, a na koniec zapisać.
$newArticle = $this->Articles->newEmptyEntity(); $newArticle = $this->Articles->patchEntity($newArticle, $newArticleData, [ 'associated' => [ 'Packages', 'Tags' ] ]); if ($this->Articles->save($newArticle)) { //data saved }