$node->filter возвращает Crawler, у него есть метод count() который возвращает количество node.
Соответственно, вам после $node->filter(...), надо проверить количество
В Symfony отсутствует поле с функционалом autocomplete.
Необходимо использовать обычное текстовое поле на стороне Symfony, и конвертировать его значение в необходимую сущность через Data Transformer. Так же придется реализовать самостоятельно autocomplete с реализация AJAX контроллера.
Можно написать необходимый валидатор для модели/сущности.
Но корректнее будет изменять форму (добавлять или удалять поля) по событиям формы, до валидации.
Автоматизированного решения нет и быть не должно.
Автоматика не знает с какой целью могут существовать методы у класса-сущности.
То, что методы являются геттерами и сеттерами это частный случай и генерируется для быстрого прототипирования.
This is superficial and independent from validation. At best, if you let Symfony guess your field type, then the value of this option will be guessed from your validation information.
Т.е., то что в вашей форме присутствуют поля с 'required' => true (оно же по умолчанию), не влияет на валидацию.
По этому, $form->isValid() === true
Если у вас нет ни класса, ни сущности Doctrine на которую отображается форма, вам необходимо прописать правила валидации самостоятельно
Можно использовать любую схему.
Я выбрал бы вторую, так как при добавлении/удалении новых типов связи, не надо делать ALTER TABLE основной.
В Doctrine эти связи реализуются одинаково, через One-To-One, с той лишь разнице, у какой сущности будет прописана связь.
Вообще структура БД должна быть логична, так например, должна ли знать MainEntity про AdditionalEntity1, или AdditionalEntity1 должен знать про MainEntity.