54 Nachrichten unter 19 Themen von 27 Mitgliedern
[SilverStripe Roadmap][Changelog]

Relationen im Frontend erstellen

Seite: 1 2528 mal gelesen
  • robiwankenobi
    robiwankenobi Community Member
    2 Beiträge

    Relationen im Frontend erstellen

    Hallo Community,

    als Neuling verzweifle ich an den wahrscheinlich einfachsten Sachen, bei denen sich die Könner sicher auf die Schenkel klopfen. Aber vielleicht könnt ihr mir ja helfen...

    Bei der Eingabe eines Ligamatches mit 2 Spielern über ein Frontend-Formular soll eine relationale Verknüpfung zwischen Match (Tochter-Tabelle) mit Herausforderer (Eltern-Tabelle) erfolgen. Leider verzweifle ich an dieser Aufgabe. Die Verknüpfungsspalte ist zwar vorhanden, aber ich habe keine Ahnung, wie sie mit der Bezugs-ID gefüllt werden soll.

    Hier mein bisheriger Code:

    Tabelle für die Ligamatches:
    <?php
    class SpielSubmission extends DataObject {
    static $db = array(
    'Saison' => 'Text',
    'Spieldatum' => 'Date',
    'Spieltag' => 'Int',
    'Flipper' => 'Text',
    'Herausforderer' => 'Text',
    'Gegner' => 'Text',
    'Sieger' => 'Text',
    'PunkteHerausforderer' => 'Int',
    'PunkteGegner' => 'Int'
    );

       static $has_one = array (
          'Spielername' => 'Spielerverwaltung'
       );

    }
    ?>

    Tabelle für die Spieler:
    <?php
    class Spielerverwaltung extends DataObject {
    static $db = array(
    'Spielername' => 'Text',
    'Liga' => 'Text',
    'aktiv' => 'Text',
    'Punkte' => 'Int',
    'Spielstaerke' => 'Int'
    );

    static $defaults = array(
        "aktiv" => "2",
    );

       static $has_many = array (
          'Herausforderer' => 'SpielSubmission'
       );


    }
    ?>

    Controller:
    <?php

    class SpielerEingabe extends Page {

    static $db = array(
    );
    static $has_one = array(
    );

    }



    class SpielerEingabe_Controller extends Page_Controller {

    function SpielereingabeForm() {

          //DROPDOWNFÜLLUNG VIA ARRAY
    $Liga = array(
             'IsarAmper' => 'IsarAmper',
             'Küste' => 'Küste'
       );
       
       // Create fields
       $fields = new FieldSet(    
    new DropdownField('Liga','Liga', $Liga),
    new TextField('Spielername','Spielername'),
    new OptionsetField('aktiv', 'in aktueller Saison aktiv?', array(
    '1' => 'ja',
    '0' => 'nein'
    ))
    );

    // Create actions
    $actions = new FieldSet(
    new FormAction('doSpielerEingabe', 'Speichern')
    );


        // Create validator
        $validator = new RequiredFields('Liga', 'Spielername');

        return new Form($this, 'SpielereingabeForm', $fields, $actions, $validator);

    }


        // Übertragung der Eingaben an die Datenbank
    function doSpielerEingabe($data, $form) {
    $submission = new Spielerverwaltung();
    $form->saveInto($submission);
    $submission->write();


    Director::redirectBack();

    }


        // ANZEIGEN DER SPIELER
       function SpielerResults() {
          $record = DataObject::get('Spielerverwaltung','','ID');
          return $record;
    }


    }

    ?>

    Vielen Dank für Eure Hilfe,
    Robert
  • Izeroy
    Community Member
    212 Beiträge

    Re: Relationen im Frontend erstellen

    Öhhhm... ich blick um ehrlich zu sein noch nicht ganz durch.

    Also bis dahin hast du ein Formular, welches einen "neuen" Spieler erstellt.
    Was soll nun genau mit diesem Spieler passieren?

    Dann verstehe ich noch nicht genau, das ganze Datenbankkonstrukt.

    Du hast 1 Match mit 2 Spielern, fügst aber nur einen Spieler aus der Datenbank an das Match?

    Also so ganz erschließt sich mir noch nicht dein Problem. Ist jetzt das wo du nicht weiterkommst überhaupt schon mit in dem Code? Oder hast du dazu noch gar nichts gemacht?

    Für Fragen, bin ich auch in den unten genannten Messengern Online, vielleicht geht es darüber besser.

    Greetz
    Benjamin

    Weitere Fragen?! Meld dich einfach! MSN: benjamin.buessenschuett@hotmail.de ICQ: 354 848 193 Webseite: www.silverstripe-hilfe.de

  • robiwankenobi
    robiwankenobi Community Member
    2 Beiträge

    Re: Relationen im Frontend erstellen

    Hi,

    auch wenn ich seit letztem Mal ein wenig weiter gekommen bin (vielen Dank an Izeroy für den Chat!), häng ich immer noch an dieser Relationssache. Habe die Relation auf many_many umgestrickt, da das einfach mehr Sinn macht (ein Spieler hat viele Matches, ein Match hat zwei - also viele - Spieler).

    Die Tabelle mit den m.n-Verknüpfungen wurde korrekt erstellt, ebenso werden die Daten des Matcheintrags über das Frontendformular korrekt gespeichert. Nur wie man das ComponentSet korrekt einsetzt, um die Relation in die m:n-Tabelle zu bekommen, check ich einfach nicht...

    Bin für jeden Hinweis unendlich dankbar...

    Hier die Codes (das, was mir Schwierigkeiten bereitet, ist blau markiert):

    MODEL DER MATCH-DB
    <?php
    class SpielSubmission extends DataObject {
    static $db = array(
    'Herausforderer' => 'Text',
        'Gegner' => 'Text',
    );
       static $many_many = array (
          'Spielername' => 'Spielerverwaltung'
       );
    }
    ?>



    MODEL DER SPIELER-DB
    <?php
    class Spielerverwaltung extends DataObject {
    static $db = array(
    'Spielername' => 'Text',
    );
       static $belongs_many_many = array (
          'Match' => 'SpielSubmission'
       );
    }
    ?>


    CONTROLLER FÜR DIE MATCH-EINGABE IM FRONTEND
    class SpielEingabe_Controller extends Page_Controller {
       function SpieleingabeFormular() {
    //...    
    $fields = new FieldSet(    
    //...
       );
    //...
       return new Form($this, 'SpieleingabeFormular', $fields, $actions, $validator);
        }

       // Übertragung der Eingaben an die Datenbank
       function doSpielEingabe($data, $form) {
       $submission = new SpielSubmission();

       // Herausforderer-Name wird aus Spielerverwaltung ausgelesen anhand der ID
       $Herausforderer = DataObject::get_by_id('Spielerverwaltung', $data['Herausforderer']);
           
       // Gegner-Name wird aus Spielerverwaltung ausgelesen anhand der ID
       $Gegner = DataObject::get_by_id('Spielerverwaltung', $data['Gegner']);
       
       // Flipper-Name wird aus FlipperDB ausgelesen anhand der ID
       $Flipper = DataObject::get_by_id('FlipperDB', $data['Flipper']);
          
       $form->saveInto($submission);

       // Herausforderer-Name wird aus Spieler-DB ermittelt und übergeben
       $submission->Herausforderer = $Herausforderer->Spielername;

       // Gegnername wird aus Spieler-DB ermittelt und übergeben
       $submission->Gegner = $Gegner->Spielername;
       
       //Flippername wird aus Flipper-DB ermittelt und übergeben   
       $submission->Flipper = $Flipper->Flipper;

       // Spielsubmission wird gespeichert
       $submission->write();          

    Director::redirectBack();
    }


    //RELATION ERZEUGEN (GEHÖRT DAS EVTL IN „function doSpielEingabe“???)
    function Relationserzeugung (){
          // Match wird aus Spielsubmission ausgelesen anhand der ID
          $Match = DataObject::get_by_id('Spielsubmission', 'ID DER LETZTEN MATCHEINGABE?');
          
          // Heraussuchen der Relation
          $Match_Spieler_Relation = $Match->Spielername();
          
          // Herausforderer-Name wird aus Spielerverwaltung ausgelesen anhand der ID
           $Herausforderer = DataObject::get_by_id('Spielerverwaltung', 'ID HERAUSFORDERER DES LETZEN MATCHES');
           
          // Gegner-Name wird aus Spielerverwaltung ausgelesen anhand der ID
          $Gegner = DataObject::get_by_id('Spielerverwaltung', ''ID HERAUSFORDERER DES LETZEN MATCHES ');
          
          // Array mit beiden Spielern erzeugen
          $Spielerarray = array($Herausforderer, $Gegner);
                   
          // Hinzufügen der neuen Relation
          $Match_Spieler_Relation = addMany($Spielerarray);   
    }




    Greets,
    Robert

Zur Zeit online: Zur Zeit ist leider niemand online.

Wir begrüßen unsere neuen Mitglieder: RufusCoili