Доктрина: Многие Многие - PullRequest
1 голос
/ 01 июля 2019

Я новичок в Synfony2 и использовании доктрины.Я создал две связанные сущности для опроса. Приложение \ Сущность \ Вопрос :

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\QuestionRepository")
 */
class Question
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Options", inversedBy="questions")
     */
    private $options;

    public function __construct()
    {
        $this->options = new ArrayCollection();
    }
}

Приложение \ Сущность \ Параметры :

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\OptionsRepository")
 */
class Options
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Question", mappedBy="options")
     */
    private $questions;

    public function __construct()
    {
        $this->answers = new ArrayCollection();
        $this->questions = new ArrayCollection();
    }
}

Создает новую таблицу: question_options.Теперь моя модель MYSQL выглядит так: model Теперь мне нужно прикрепить question_options таблицу к таблице answer с помощью answer.question_options_id.Как я могу сделать это с помощью Doctrine?Я сбиваю с толку из-за отсутствия question_options сущности.Я обнаружил, что соединения «многие ко многим» не являются сущностями.

1 Ответ

1 голос
/ 01 июля 2019

лучшим способом было бы прикрепить Option к ответу, потому что question_options таблица - это только метаданные, и пользователь в пуле действительно выбирает опцию.В каком-то смысле пользователь при ответе выбирает не вопрос, а скорее конкретную опцию.Это выглядит просто странно, что в ответе на вопрос можно задать вариант FK.

или создать «многие ко многим» вручную, создав вручную класс сущностей QuestionOption, объединение с использованием OneToMany, ManyToOne с вопросом и параметром

это лучший вариант, чтобы сделать его более открытым закрытым для модификации, потому что вы можете добавить больше полей, описывающих ответ, если необходимо, например, например, время, которое требуется для ответа, количество изменений и т. д.

Я также рекомендовал бы добавитьСуффикс пользователя для таблиц / сущностей, имеющих FK с пользователем, потому что теперь он сбивает с толку то, что является ответом пользователя, и какова просто общая структура пула.

...