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'
	]
]);
Następnie przejdź przez kolekcje i usuń wszystkie ID-eki. W ten sposób przygotujesz dane pod nową encję.
$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
}