Мне нужно выполнить следующие настройки: родительский класс
/**
* @ORM\Entity()
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
*/
abstract class DataCategory
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
//...
}
и несколько производных классов, которые содержат ссылки на родительский класс (только здесь показан один)
/**
* @ORM\Entity
*/
class MultiCompoundDataCategory extends DataCategory
{
/**
* @ORM\ManyToMany(targetEntity="DataCategory", fetch="EXTRA_LAZY")
* @ORM\JoinTable(name="multi_compound_data_category_data_category",
* joinColumns={@ORM\JoinColumn(name="multi_compound_data_category", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="data_category", referencedColumnName="id")})
*/
public $summands;
public function __construct()
{
$this->summands = new ArrayCollection();
}
}
Теперь при загрузке всехMultiCompoundDataCategories через $this->getDoctrine()->getRepository(MultiCompoundDataCategory::class)->findAll()
, выдается не только один выбор для MultiCompoundDataCategories (с объединением в таблице ManyToMany).Вместо этого я получаю один основной запрос, за которым следует один запрос для каждого слагаемого, каждое с большой жирной последовательностью LEFT JOIN
(также документы содержат предупреждение об этой проблеме, я в массовом порядкессылка на неконечные узлы дерева наследования).
Кстати: не будет LAZY
выборки уже достаточной, чтобы избежать загрузки ManyToMany?
Из этого комментария ,Я предполагаю, что проблема в том, что мои дочерние сущности защищают родительскую сущность.Как я могу обойти это?MappedSuperclass