Как реализовать отзывы для нескольких сущностей?

Учусь Symfony, и не совсем понимаю, как можно реализовать entity отзывов так, чтобы была одна таблица для отзывов, но их можно было назначить в разные сущности, такие как Article, Image, Post. Я рассуждаю так:

- у каждой из сущностей Article, Image, Post может быть много отзывов.
- но каждый из отзывов может быть только у одной из этих сущностей.

Например, один объект Article может иметь много экземпляров объекта Review - это же OneToMany, если я правильно понимаю. Значит класс Article получается такой (главным образом меня волнуют правильность свойств объектов и их аннотаций, ибо я могу напутать по неопытности):

// аналогичный класс и для сущностей Image и Post
class Article
        /**
         * @ORM\OneToMany(targetEntity="Review")
         * @ORM\JoinColumn(referencedColumnName="id", nullable=true)
         */
        private $reviews;
}


А вот как быть со сущностью отзыва - в него обязательно добавлять свойства всех 3х типов связей? Или вообще не добавлять никаких свойств?

class Review
        /**
         * @ORM\ManyToOne(targetEntity="Reviews")
         */
        private $article;

        /**
         * @ORM\ManyToOne(targetEntity="Reviews")
         */
        private $post;

        /**
         * @ORM\ManyToOne(targetEntity="Reviews")
         */
        private $image;
}


Что то мне кажется, что я написал бред...

Возможно ли в этой ситуации обойтись одной сущностью отзыва Review? Или нужно сделать для каждой сущности свой объект отзыва, типа: ArticleReview для статей, ImageReview для отзывов к картинкам, и PostReview для отзывов к постам?

Сильно не пинайте пожалуйста - я только учусь))
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
padlyuck
@padlyuck
https://www.doctrine-project.org/projects/doctrine... или https://www.doctrine-project.org/projects/doctrine... для организации всех комментариев в одной таблице. Судя по документации вам придется сделать класс родительского комментария и 3 класса конкретных сущностей комментариев относительно того к чему они привязаны. Да и разный функционал будет проще потом разносить, а не мешать в кучу коней с людЯми
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Это однонаправленная связь через промежуточные таблицы связей. По-другому можно но совсем не очень. Обратная связь вам не нужна. Не для разработки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы