Перевод формы в Symfony 2 knplabs - лучший способ изменить referenceColumName
A2lix требует 'id' в качестве referenceColumName. Но у меня есть сущности с другим columName (например, ProductID вместо id). Поэтому я получаю сообщение об ошибке, когда пытаюсь обновить свою БД с помощью doctrine:schema:update --force.
Пример моей сущности
class Period
{
use ORMBehaviors\Translatable\Translatable,
ORMBehaviors\Timestampable\Timestampable,
ORMBehaviors\SoftDeletable\SoftDeletable
;
/**
* @var integer
*
* @ORM\Column(name="PeriodID", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
...
Часть класса TranshableSubscriber пакета KnpDoctrineBehaviors
...
private function mapTranslatable(ClassMetadata $classMetadata)
{
if (!$classMetadata->hasAssociation('translations')) {
$classMetadata->mapOneToMany([
'fieldName' => 'translations',
'mappedBy' => 'translatable',
'indexBy' => 'locale',
'cascade' => ['persist', 'merge', 'remove'],
'fetch' => $this->translatableFetchMode,
'targetEntity' => $classMetadata->getReflectionClass()->getMethod('getTranslationEntityClass')->invoke(null),
'orphanRemoval' => true
]);
}
}
private function mapTranslation(ClassMetadata $classMetadata)
{
if (!$classMetadata->hasAssociation('translatable')) {
$classMetadata->mapManyToOne([
'fieldName' => 'translatable',
'inversedBy' => 'translations',
'fetch' => $this->translationFetchMode,
'joinColumns' => [[
'name' => 'translatable_id',
'referencedColumnName' => 'id',
'onDelete' => 'CASCADE'
]],
'targetEntity' => $classMetadata->getReflectionClass()->getMethod('getTranslatableEntityClass')->invoke(null),
]);
}
$name = $classMetadata->getTableName().'_unique_translation';
if (!$this->hasUniqueTranslationConstraint($classMetadata, $name)) {
$classMetadata->table['uniqueConstraints'][$name] = [
'columns' => ['translatable_id', 'locale' ]
];
}
if (!$classMetadata->hasField('locale')) {
$classMetadata->mapField(array(
'fieldName' => 'locale',
'type' => 'string'
));
}
}
...
Любая идея или помощь будут оценены.
Большое спасибо;-)
1 ответ
Вы можете использовать:переопределение ассоциации
Я попытался переопределить свойства, но они созданы подписчиком, и у меня возникли исключения. Вы также можете повторно объявить аннотацию
manyToOne
в вашем классе сущности. Меня устраивает.