Doctrine – nefunguje cascade update

exquis
Člen | 82
+
0
-

Ahoj, netušíte proč nefunguje u ukládání překladů cascade update?

Používám:

extensions:
	translation: Kdyby\Translation\DI\TranslationExtension
	translatable: Zenify\DoctrineBehaviors\DI\TranslatableExtension

translation:
	default: cs
	debugger: false
	fallback: [cs, en]

translatable:
	currentLocaleCallable: [@translation.default, getLocale]
Category.php

<?PHP

namespace App\Model\Entity\Category;

use App\Model\Contract\Entity\Slug\SlugInterface;
use App\Model\Entity\Slug\AbstractSlug;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Kdyby\Doctrine\Entities\Attributes\Identifier;
use Knp\DoctrineBehaviors\Model\SoftDeletable\SoftDeletable;
use Knp\DoctrineBehaviors\Model\Timestampable\Timestampable;
use Knp\DoctrineBehaviors\Model\Translatable\Translatable as KnpTranslatable;
use Nette\Utils\Strings;
use Zenify\DoctrineBehaviors\Entities\Attributes\Translatable as ZenifyTranslatable;


/**
 * @Gedmo\Tree(type="nested")
 * @ORM\Table(name="category", indexes={
 *     @ORM\Index(name="lft_index", columns={"lft"}),
 *     @ORM\Index(name="is_active_index", columns={"is_active"}),
 *     @ORM\Index(name="lvl_index", columns={"lvl"}),
 *     @ORM\Index(name="premier_id_index", columns={"premier_id"})
 * })
 * @ORM\Entity
 */
class Category implements SlugInterface
{

	use Identifier;
	use KnpTranslatable;
	use SoftDeletable;
	use Timestampable;
	use ZenifyTranslatable;
...
CategoryTranslation.php

<?PHP

namespace App\Model\Entity\Category;

use App\Model\Entity\Core\Metadata;
use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model\Translatable\Translation;


/**
 * @ORM\Entity
 * @ORM\Table(name="category_translation", indexes={
 *     @ORM\Index(name="name_index", columns={"name"})
 * })
 */
class CategoryTranslation
{

	use Translation;
...

a pak to používám:

/**
	 * {@inheritdoc}
	 */
	protected function processRow($entity)
	{
		$id = $entity['sortiment'];
		if (in_array($id, self::SKIP_IDS)) {
			$this->logInfo('Skipping category import: ' . $id);
			return;
		}
		if ($entity['nadraz'] instanceof SimpleXMLElement) {
			$parentEntity = $this->rootCategory;

		} else {
			$parentEntity = $this->categoryRepository->findOneBy(['premierId' => $entity['nadraz']]);

		}
		$category = $this->categoryRepository->findOneBy(['premierId' => $id]);
		if ( ! $category) {
			$metadata = new Metadata($entity['nazev'], $entity['nazev']);
			$translation = new CategoryTranslation($entity['nazev'], self::LOCALE, $metadata);
			$category = new Category;
			$category->addTranslation($translation);
			$category->setActive(TRUE);
		}

		$this->handleData($category, $parentEntity, $entity);
	}


	/**
	 * @param Category $category
	 * @param Category $parentEntity
	 * @param array $entity
	 */
	private function handleData(
		Category $category,
		Category $parentEntity,
		$entity
	) {
		$id = $entity['sortiment'];
		$name = $entity['nazev'];
		$nameLowered = Strings::firstUpper(Strings::lower($name));

		$category->setParent($parentEntity);
		$category->setPremierId($id);
		$category->setName($nameLowered);
		$category->setNameInMenu($nameLowered);

		$metadata = $category->getMetadata();
		$metadata->setTitle($nameLowered);
		$metadata->setDescription($nameLowered);

		if ($this->isImport) {
			$slug = $id . '-' . Strings::webalize($nameLowered);
			$category->addSlug(new CategorySlug($slug));
		}

		$this->categoryRepository->save($category);

		// v category repository save() je:
		// $this->entityManager->persist($entity);
		// $this->entityManager->flush($entity);
	}

Vytvoreni prvniho zaznamu je v pohode, ale jakmile jde o update, tak se nic nestane. Kdyz si dumpnu metadata ci translation tesne pred ->save() tak vyhodi spravna data, ale pres save uz se do DB nedostanou.

EDIT:

Jak už to tak bývá, jakmile se zeptáte, tak na to musíte přijít 2 minuty poté – problém byl v $this->entityManager->flush($entity), jakmile nechám jen $this->entityManager->flush() bez parametru, tak vše běhá :)

Editoval exquis (29. 9. 2017 17:53)