2016-05-19 6 views
3

Ich habe zwei Klassen mit einer $many_many und $belongs_many_many Beziehung zwischen ihnen. Ich habe versucht, $summary_fields in der Klasse zu definieren, die $many_many enthält, um die Beziehung zwischen den Klassen anzuzeigen, aber diese Spalte ('Column2.Column2') zeigt leere Ergebnisse an. Wie stelle ich $summary_fields ein, um diese Daten korrekt anzuzeigen?

Hier ist mein Code

class Table1 extends DataObject { 

    private static $db = array(
     'Column1' => 'Varchar(32)' 
    ); 

    private static $many_many = array (
     'Column2' => 'Table2' 
    ); 

    private static $summary_fields = array (
     'Column1' => 'Column 1', 
     'Column2.Column2' => 'Column 2' 
    ); 
} 

class Table2 extends DataObject { 

    private static $db = array(
     'Column2' => 'Varchar(32)' 
    ); 

    private static $belongs_many_many = array (
     'Column1' => 'Table1' 
    ); 
} 

Antwort

4

Das Problem ist ein $many_many Beziehung oder eine $has_many Beziehung kann auf mehrere Objekte verknüpft werden. Wir können $many_many oder $has_many nicht in $summary_fields als eine einzelne Zeile im GridField setzen nicht wissen, wie mehr als ein Element angezeigt werden.

Zum Beispiel sagen wir haben Columns.Title wo Columns ist eine $many_many Beziehung auf dem aktuellen Objekt. Wenn wir drei Columns Objekte mit dem aktuellen Objekt verknüpft haben, kann das System den Titel der drei Spalten nicht anzeigen.

Wir können eine Funktion erstellen, um eine Zeichenfolge zurückzugeben, die die Daten anzeigt, die wir anzeigen möchten.

class Table1 extends DataObject { 

    private static $db = array(
     'Title' => 'Varchar(32)' 
    ); 

    private static $many_many = array(
     'Columns' => 'Table2' 
    ); 

    private static $field_labels = array(
     'ColumnsString' => 'Column' 
    ); 

    private static $summary_fields = array(
     'Title', 
     'ColumnsString' 
    ); 

    public function ColumnsString() { 
     $returnString = ''; 
     foreach ($this->Columns() as $column) { 
      $returnString .= $column->Title . ' '; 
     } 
     return $returnString; 
    } 
} 

class Table2 extends DataObject { 

    private static $db = array(
     'Title' => 'Varchar(32)' 
    ); 

    private static $belongs_many_many = array(
     'Columns' => 'Table1' 
    ); 
} 
+0

Alle 'ColumnsString' erscheinen in derselben Zeile von 'Titel'. Wie lege ich jeden 'ColumnsString' in separate Zeilen mit wiederholendem 'Titel'? –

Verwandte Themen