У меня возникли проблемы с отображением этих отношений в Доктрине. У меня есть UseCase, у которого есть много UseCaseSteps. У UseCaseStep есть много подэтапов, которые являются OneToMany на UseCaseStep. Вот подходящий код у меня есть атм:Как мне сопоставить эти отношения?
/**
* UseCase
*
* @ORM\Table(name="use_cases")
* @ORM\Entity(repositoryClass="DesignCase\Bundle\Bundle\Entity\UseCaseRepository")
*/
class UseCase
{
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Actor", inversedBy="use_cases", cascade={"persist", "remove"})
* @ORM\JoinTable(name="actors_use_cases")
*/
private $actors;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="UseCaseStep", mappedBy="useCase", cascade={"persist", "remove"})
* @ORM\OrderBy({"order" = "ASC"})
*/
private $steps;
}
/**
* UseCaseStep
*
* @ORM\Table(name="use_case_steps")
* @ORM\Entity(repositoryClass="DesignCase\Bundle\Bundle\Entity\UseCaseStepRepository")
*/
class UseCaseStep
{
/**
* @var integer
*
* @ORM\ManyToOne(targetEntity="UseCase")
*/
private $useCase;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="UseCaseStep", mappedBy="parent", cascade={"persist", "remove"})
* @ORM\OrderBy({"order" = "ASC"})
*/
private $subSteps;
/**
* @var UseCase
*
* @ORM\ManyToOne(targetEntity="UseCase")
*/
private $useCaseReference;
/**
* @var UseCaseStep
*
* @ORM\ManyToOne(targetEntity="UseCaseStep")
* @ORM\JoinColumn(nullable=true)
*/
private $parent;
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="BusinessRule", cascade={"persist", "remove"})
*/
private $businessRules;
}
Этот код не является полным, но я думаю, что он имеет всю необходимую информацию. Я хочу создать новый объект TestCase, который имеет много TestCaseStep. TestCase - это UseCase с немного дополнительной информацией ... то же самое для TestCaseStep и UseCaseStep. IE, TestCaseStep - это UseCaseStep с добавлением данных и ожидаемыми выходными полями. Пользователь может создавать множество TestCases из одного UseCase.
Я попытался использовать UseCase и UseCaseStep @MappedSuperclass, но это не имеет желаемого эффекта. Я получаю очевидное: «Неправильно устанавливать обратную сторону« одна ко многим »или« многие ко многим »при сопоставлении суперкласса». Кроме того, из документов я не думаю, что это правильный подход.
У меня возникли проблемы с обволакиванием моего мозга вокруг него. Есть предположения? Надеюсь, я объяснил это достаточно хорошо ...
Спасибо, хорошо продуманный ответ. Я пошел с последним подходом. Как вы сказали, это сложно, но это хорошо работает. –