Я постараюсь ответить на ваш вопрос так, как я его понимаю. Допустим, у меня есть Faculty
объект, связанный с одним University
объектом. Поэтому в форме, используемой для создания или редактирования факультета, я отображаю поле со списком всех университетов в базе данных, и пользователь выбирает один из них. Существует один специальный тип поля Symfony, который делает именно это: тип сущности. Ниже приведен код метода buildForm
, который я использую в своем объекте FacultyType
, используемом для создания формы факультета:
// Application\AcmeBundle\Form\Type\FacultyType
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('name');
$builder->add('university', 'entity', array(
// The class of the entity used as a combo box item
'class' => 'AcmeBundle:University',
// The property of the entity displaying the entity as text
'property' => 'name',
// The query builder used to populate the combo box, accepts
// a QueryBuilder object or a \Closure like below
'query_builder' => function(EntityRepository $repository) {
// This will return a query builder selecting all universities
return $repository->createQueryBuilder('u');
}
));
}
Примечание. Существуют и другие свойства, которые можно установить для типа поля сущности. Я приглашаю вас взглянуть на эту страницу для получения дополнительной информации.
Оказывается, это покажет комбинированное окно со всеми университетами, которые я установил в базе данных. Когда пользователь сохраняет форму, выбранный университет назначается объекту факультета, связанному с формой через установщик. Возможно, вы могли бы сделать выпадающий список вместо поля со списком. Если вам нужно выбрать несколько объектов, может быть полезен параметр 'multiple'
объекта типа поля.
Как говорится, пример, который я показал, - это не отношение «один к одному», а «многие к одному» для объекта Faculty
и «один ко многим» для объекта University
. Отношение «один к одному» будет чем-то более похожим на отношение, в котором University
имеет уникальный Address
. В этом случае поле со списком было бы бесполезным, так как в университете может быть только один адрес, поэтому форма была бы более подходящей. Если у него много адресов, то он становится отношением «один ко многим», как отношения между университетом и его факультетами.
Не уверен, что это ответит правильно на ваш вопрос, но я надеюсь, что это приведет вас к окончательному решению.
С уважением,
Matt