Repository URL to install this package:
|
Version:
6.0.11 ▾
|
<?php
namespace DigitalAscetic\SimpleTranslatable\EventListener;
use DigitalAscetic\SimpleTranslatable\Entity\Translatable;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
use Doctrine\ORM\Events;
use Doctrine\ORM\Mapping\ClassMetadata;
/**
* This listener dynamically establish the correct mapping
* for translatable entity relations
*/
class TranslatableMappingListener implements EventSubscriber
{
public function getSubscribedEvents(): array
{
return array(
Events::loadClassMetadata
);
}
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
{
/** @var ClassMetadata $metadata */
$metadata = $eventArgs->getClassMetadata();
$reflectionClass = $metadata->getReflectionClass();
if (!$reflectionClass->implementsInterface(Translatable::class)) {
return;
}
$className = $reflectionClass->getName();
$metadata->mapManyToOne(
array(
'targetEntity' => $className,
'fieldName' => 'translationSource',
'inversedBy' => 'translations',
'cascade' => array('persist', 'remove', 'merge'),
'joinColumns' => array(
array(
'name' => 'translationSource',
'referencedColumnName' => 'id',
'onDelete' => 'CASCADE',
'onUpdate' => 'CASCADE',
'nullable' => true
),
)
)
);
$metadata->mapOneToMany(
array(
'targetEntity' => $className,
'fieldName' => 'translations',
'mappedBy' => 'translationSource',
'cascade' => array('persist', 'remove', 'merge')
)
);
}
}