Я пытаюсь точно определить, как реализовать правильное разделение между двумя пакетами в Symfony, и я столкнулся с проблемой доктрины.Расширение базового класса с помощью доктрины, были ли у моего базового класса 1: n ассоциаций
У меня есть два пучка, более общий набор (полный абстрактных классов) под названием BaseProduct, а затем реализация этого пакета (который дает возможность специализироваться на функциональности этого пакета) под названием ClientProduct.
У меня есть два объекта в комплекте «Продукт», которые связаны.
abstract class Product
{
// One product has many attributes
private $attributes;
private function getAttributes()
{
return $this->attributes;
}
}
abstract class Attribute
{
private $name;
private $value;
private function getName()
{
return $this->name;
}
private function getValue()
{
return $this->value;
}
}
А затем конкретная реализация
class Product extends BaseProduct/Product
{
}
class Attribute extends BaseProduct/Attribute
{
}
Мой вопрос
Во-первых, я бы использовал «mappedSuperclass», чтобы сделать это, но от чтения документации вы косяк набор вверх коллекций как ассоциаций (понятно) на нечетких классах.
Я пытаюсь найти другой способ сделать это.
Возможно ли это? Потому что мой «базовый класс» имеет отношение к другому «базовому классу» (как абстрактному). В таком случае мне нужно переместить отношения в «конкретную» реализацию или я могу сохранить их на этом уровне (абстрактное)? Мои определения сущностей (.yml) не показаны, но я намерен связать их с конкретными реализациями (где ассоциации между объектами также находятся между другими конкретными реализациями) и оставить базовые классы без определения сущности.
Любой вход приветствуется - целью здесь является создание развязанного пакета, который может быть специализированным. Я уверен, что это довольно распространенная цель, поэтому мне было бы интересно увидеть, как это делают другие (если есть какие-то пакеты на github, которые мне бы это понравились).
Проблема, с которой я столкнулся с использованием этого подхода, заключается в том, что если я создам конкретный базовый класс, а затем я попытаюсь обновить мою схему базы данных с помощью консоли (doctrine: schema: update -force), она жалуется что файл сопоставления метаданных объекта отсутствует (конечно, это потому, что я не хочу, чтобы система рассматривала этот объект как объект домена в моей системе). Это может быть уникальным для symfony, но мое обходное решение - просто прокомментировать расширения этих файлов при обновлении моей схемы (очень раздражает). У меня такое чувство, что я что-то упускаю. – calumbrodie