2016-10-16 2 views
-2

ich eine Benutzereinheit haben mit anderen Einrichtungen wie Runner beitreten, Basketballspieler, Fußballspieler, ...). Jeder athletisch hat spezielle Felder, also erstelle ich eine Benutzereinheit, die Runner-Entity, Basketball-Entity, Football-Entity verbindet. Diese athletische Benutzereinheit verbindet, aber diese Lösung ist nicht suiable weil die Admin neue Athletisch spezifikations Felder hinzufügen muß, ist es nicht geeignet, auch developper zu stellen neue Einheit für jeden neuen athletischen Typen zu schaffen Ich denke, zuerst json Datenfeld in Benutzer hinzufügen Entity, aber wie admin Kann den Typ des neuen Feldes angeben, und ich kann diese Art von JSON-Felder im Formular implementieren.Symfony einer Einheit verbinden viele Unternehmen

Vielen Dank für Ihre Hilfe

+2

Sorry, aber ich verstehe Sie nicht. Warum tritt ein Benutzer mehreren Sportlern bei? Ist er ein Trainer/Teamleiter? Und was du damit beabsichtigst zu sagen "mach mit". Ich sehe, dass Englisch nicht deine erste Sprache ist, aber du musst das näher ausführen, wenn du eine Antwort willst. –

+0

Benutzertabelle enthält commons Felder für alle Sport-Typen, jede Sportart Besonderheiten Felder hat, so muß ich Benutzereinheit erstellen, die andere Einheit verbindet, aber mein Problem, wie ich tun kann, dass der Administrator eine neue Einheit für eine neue Sportart hinzufügen mit spezifischen Feldern? – kaneda

+0

So sind sie Sportarten. Und die Beziehung soll "Benutzerpraxissport" bedeuten? –

Antwort

2

Ich hoffe, dies wird Ihnen helfen.

Wenn ich verstehe, was Sie geschrieben haben, ich glaube, Sie nur eine Eigenschaft zu Ihrem Benutzer Entity hinzufügen müssen. Eine User-Entity kann ein Football-Spieler oder ein Runner etc. sein. Fügen Sie einfach eine sportType-Eigenschaft zu Ihrer User-Entity hinzu.

Wenn ein Benutzer Multiples sportType haben dann vielleicht könnten Sie drei Tabellen in Ihrer Datenbank verwenden: 1 Tabelle namens Benutzer 1 Tabelle namens Sport 1 Tabelle namens user_sports

Tabelle Benutzer

ID Name email   ... 
1 Name1 [email protected] ... 
2 Name2 [email protected] ... 
3 Name3 [email protected] ... 

Tabelle Sport

ID Name 
1 football 
2 basketball 
3 running 

Tabelle user_sport

ID user_id sport_id 
1 1  3 
2 8  1 
3 1  2 
.. ..  .. 

Da ein Benutzer viele Sportarten haben kann, dann ist es eine "eins zu viele" Beziehung. Sie können auf der Doctrine documentation sehen, wie Sie diese Art von Beziehung auf Ihre Entitäten einstellen.

Update: Wenn ich verstehe, dass Ihr Administrator Felder zu einer Sport-Entität hinzufügen wird und Sie nicht wissen, wie viele Felder eine Sport-Entität haben wird.

Sie können die Daten Transformers-Komponente verwenden. Schauen Sie sich hier an:

Wenn Sie das Formular erstellen, damit Ihr Administrator eine neue Sport-Entität hinzufügen kann, können Sie ihm einen TextAreaType geben. Der Admin fügt diesem TextAreaField manuell einen gültigen JSON hinzu

Wenn der Admin das Formular an Ihren Controller sendet, wird es Ihren TextAreaType entsprechend Ihrer Definition in SportType transformieren.

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

Ich weiß, ich muss Benutzer Tabelle mit anderen Tabellen beitreten, jetzt habe ich nur 3 Sportart, aber wenn der Administrator eine neue Sportart mit spezifischen Feldern hinzufügen möchten, wie kann ich tun? – kaneda

+0

Ich aktualisierte meine Antwort in der Hoffnung, dass diese Hilfe Ihnen – Mz1907

+0

danke Ihnen, ich weiß nicht "addModelTransformer", ich versuche, das zu verstehen, ich denke, es ist eine gute Lösung, Json Daten in einem Feld zu speichern, weil in Symfony ein Benutzer (admin Rolle) kann keine neue Entität erstellen. – kaneda

Verwandte Themen