Что значит ошибка
Discriminator field "x" in "y" conflicts with a mapped field's "name" attribute.
брошено?
Более конкретно я имею в виду это условие:
if ($this->discriminatorField !== null && $this->discriminatorField === $mapping['name']) {
throw MappingException::discriminatorFieldConflict($this->name, $this->discriminatorField);
}
хорошо, я уверен, что может быть несколько причин @ delboy1978uk, я вставлю их сейчас
оказывается, я бы вставил пример Person / SuperUser (наследование одной коллекции) из документации. единственное отличие - это абстрактный класс без аннотаций, которые расширяет Person, но когда я удаляю это отношение, я все равно получаю ту же ошибку @ delboy1978uk
@ delboy1978uk Я не совсем прав. У меня была аннотация @String для сопоставления свойства с полем дискриминатора. Но когда я узнал, мне потребовалось больше времени, чтобы исследовать. Если есть какая-либо аннотация поля, даже @String, будет выброшено исключение. Похоже, авторы хотели подчеркнуть, что поле дискриминатора может иметь только строковые значения, но я не могу быть уверен, потому что в документах только сказано, что @String не соответствует сопоставлению типов свойств, без исключений - что за каламбур :)






Поля дискриминатора не должны быть сопоставлены со свойствами, поэтому вы видите исключение. Теоретически разработчики не должны интересоваться значением поля дискриминатора, поскольку ODM может решить, какой объект должен быть создан или как запрашивать документы в случае наследования одной коллекции. В пользовательской среде все, о чем вам следует беспокоиться, - это тип класса, с которым вы работаете.
Теперь для некоторой истории исключение было введено в БЕТА-10 в 2013 году, но раньше было невозможно сопоставить дискриминатор со свойством, фиксация, похоже, усиливает защиту и вводит исключение, которое менее запутанно. Учитывая предыдущие изменения, сделанные 6 лет назад, я бы сказал, что никогда не было возможности получить доступ к полям дискриминатора через сопоставленные свойства.
Я подумал, что, вероятно, мне следует оставить свойство в унаследованном классе, чтобы код, на который я никогда не смотрел, продолжал использовать его, как он. Но, возможно, я ошибаюсь в этом. Я поражен тем усилием, которое вы вложили в свои аргументы. Здорово, что ты рядом.
вставьте свои аннотации для обоих классов