Ответ 1
Я, наконец, понял это. Случай использования OP может быть другим, но в моем случае это произошло из-за неверно настроенного двунаправленного отношения "многие ко многим".
У меня были следующие объекты:
class Cuisine {
/**
* @ManyToMany(targetEntity="Dish")
* @ORM\JoinTable(name="CuisineDish", ...)
*/
protected $dishes;
}
class Dish {
/**
* @ORM\ManyToMany(targetEntity="Cuisine")
* @ORM\JoinTable(name="CuisineDish", ...)
*/
protected $cuisines;
}
Не хватало свойств inversedBy
и mappedBy
аннотаций @ManyToMany
. Они необходимы только тогда, когда ассоциация двунаправлена.
Итак, теперь правильно отображаемые объекты выглядят следующим образом:
class Cuisine {
/**
* @ManyToMany(targetEntity="Dish", inversedBy="cuisines")
* @ORM\JoinTable(name="CuisineDish", )
*/
protected $dishes;
}
class Dish {
/**
* @ORM\ManyToMany(targetEntity="Cuisine", mappedBy="dishes")
* @ORM\JoinTable(name="CuisineDish", ...)
*/
protected $cuisines;
}
И orm:validate-schema
больше не выходит с исключением.
Сообщение об исключении просто вводит в заблуждение, так как эта операция не изменяется. Кроме того, эта проблема обнаруживается только при проверке синхронизации с базой данных, а не при проверке только сопоставления (--skip-sync
), где она должна.
Я просто сообщил об этой ошибке.