Я надеюсь, что это поможет.
Если я понимаю, что вы написали, я думаю, вам просто нужно добавить одно свойство в свой пользовательский объект. Пользовательский объект может быть футболистом или бегуном и т. Д. Итак, просто добавьте свойство sportType в свой пользовательский объект.
Если пользователь может иметь кратные sportType тогда, возможно, вы могли бы использовать 3 таблицы в базе данных: 1 таблица с именем пользователя 1 стол называемые спортивные 1 таблица под названием user_sports
Таблица пользователя
ID Name email ...
1 Name1 [email protected] ...
2 Name2 [email protected] ...
3 Name3 [email protected] ...
Настольный спорт
ID Name
1 football
2 basketball
3 running
Таблица user_sport
ID user_id sport_id
1 1 3
2 8 1
3 1 2
.. .. ..
Поскольку один пользователь может иметь много видов спорта, то это отношение «один ко многим». Вы можете увидеть на Doctrine documentation, как установить такое отношение для ваших объектов.
Обновление: Если я понимаю, что ваш администратор добавит поля в Спортивное Существо, и вы не знаете, сколько полей будет иметь спортивная Сущность.
Вы можете использовать компонент Data Transformers. Посмотрите здесь: http://symfony.com/doc/current/form/data_transformers.html
Когда вы создаете форму, чтобы администратор мог добавить новый объект Sport, вы можете дать ему TextAreaType. Администратор добавит вручную действительный json в этот TextAreaField
Когда администратор отправит форму вашему контроллеру, он преобразует ваш TextAreaType в соответствии с тем, как вы определили в SportType.
Exemple:
// src/AppBundle/Form/SportType.php
namespace AppBundle\Form\Type;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
// ...
class SportType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('sportJsonFields', TextAreaType::class); //here you give the texterea to your admin so he inserts a json manually
$builder->get('sportJsonFields')
->addModelTransformer(new CallbackTransformer(
function ($SportJsonFieldsJson) {
// transform the json datas to a string
return json_decode($tagsAsArray);
},
function ($tagsAsString) {
// transform the string back to a valid json
return json_encode($SportJsonFieldsTextArea);
}
))
;
}
}
Извините, но я не понимаю тебя. Почему пользователь присоединяется к нескольким спортсменам? Он тренер/руководитель команды? И то, что вы намеревались сказать «присоединиться». Я вижу, что английский не является вашим первым языком, но вам нужно уточнить это, если вы хотите получить ответ. –
Таблица пользователей содержит поля для всех видов спорта, у каждого вида спорта есть специальные поля, поэтому я должен создать пользовательский объект, который присоединяется к другому объекту, но моя проблема в том, как я могу сделать это, чтобы администратор мог добавить новую сущность для нового вида спорта с конкретными полями? – kaneda
Таким образом, они являются видами спорта. И отношение будет означать «пользовательская практика спорта»? –