2016-10-16 3 views
-2

У меня есть пользовательский объект с объединением других объектов, таких как Runner, баскетболист, футболист, ...). Каждый атлетик имеет поля сложения, поэтому я создаю пользовательский объект, который объединяет объект Runner, объект баскетбола, футбольный объект. Эти атлетические присоединяются к пользовательскому объекту, но это решение не оправдано, потому что администратор должен добавить новый тип Athletic с полями spécifications, не подходит также спросить разработчиков, чтобы создать новый объект для каждого нового типа Athletic. Я думаю, что сначала добавьте поле данных json в пользователя entity, но как admin Может указывать тип нового поля, и я могу реализовать эти виды json-полей в форме.Symfony одна сущность объединяет многие сущности

Спасибо за вашу помощь

+2

Извините, но я не понимаю тебя. Почему пользователь присоединяется к нескольким спортсменам? Он тренер/руководитель команды? И то, что вы намеревались сказать «присоединиться». Я вижу, что английский не является вашим первым языком, но вам нужно уточнить это, если вы хотите получить ответ. –

+0

Таблица пользователей содержит поля для всех видов спорта, у каждого вида спорта есть специальные поля, поэтому я должен создать пользовательский объект, который присоединяется к другому объекту, но моя проблема в том, как я могу сделать это, чтобы администратор мог добавить новую сущность для нового вида спорта с конкретными полями? – kaneda

+0

Таким образом, они являются видами спорта. И отношение будет означать «пользовательская практика спорта»? –

ответ

2

Я надеюсь, что это поможет.

Если я понимаю, что вы написали, я думаю, вам просто нужно добавить одно свойство в свой пользовательский объект. Пользовательский объект может быть футболистом или бегуном и т. Д. Итак, просто добавьте свойство 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); 
       } 
      )) 
     ; 
    } 

} 
+0

Я знаю, что я должен присоединиться к таблице пользователей с другими таблицами, теперь у меня всего 3 вида спорта, но если администратор хочет добавить новый вид спорта со специальными полями, как я могу это сделать? – kaneda

+0

Я обновил свой ответ, надеясь, что это поможет вам – Mz1907

+0

спасибо, я не знаю «addModelTransformer», я пытаюсь понять это, я думаю, что это хорошее решение для сохранения данных json в поле, потому что в Symfony пользователь (admin role) не может создать новый объект. – kaneda

Смежные вопросы