2016-04-25 6 views
2

Ich habe ein DataObject genannt Dienst erstellt und ich habe eine MANY_MANY Beziehung zu RelatedServices bekam wie folgt:zu einer MANY_MANY Beziehung Sparen mit einem ListBoxField

class Service extends DataObject { 
    private static $db = array (
     'Name' => 'Varchar', 
     'Description' => 'Varchar', 
    ); 

    private static $many_many = array (
     'RelatedServices' => 'RelatedService' 
    ); 

    public function getCMSFields() { 
     $fields = FieldList::create(TabSet::create('Root')); 
     $services = $this->get()->where("\"Service\".\"Name\" != '$this->Name'")->map('ID', 'Name')->toArray(); 
     $fields->addFieldsToTab('Root.Main', array(
      TextField::create('Name'), 
      TextField::create('Description'), 
      ListBoxField::create('RelatedServices', 'Related services')->setMultiple(true)->setSource($services) 
     )); 
     return $fields; 
    } 
} 

und:

class RelatedService extends DataObject { 
    private static $db = array (
     'Name' => 'Varchar', 
    ); 

    private static $belongs_many_many = array (
     'RelatedServices' => 'RelatedService' 
    ); 
} 

Dies ist in einem ModelAdmin verwendet wird und der Dienst funktioniert, einschließlich des zugehörigen Textbereichs, jedoch nicht gespeichert. Ich tat es vorher, dass es in einem separaten Tab im CMS war und hatte RelatedService haben und Admin-Abschnitt, die durch die Datenbank sah, wie es funktioniert, aber ich dachte, es war ein unnötiger Abschnitt so versucht, alles in einem und jetzt nicht mehr speichert in der DB.

Antwort

4

Sie benötigen die Klasse 'RelatedService' nicht, da Sie auf die Klasse verweisen, in der Sie arbeiten. Es wäre also sinnvoller, sich auf die Klasse 'Service' zu beziehen.
Der Grund, warum Ihr Code nicht funktioniert, ist, weil Sie Ihre Beziehungen durcheinander gebracht haben.

class Service extends DataObject{ 
    private static $db = array (
     'Name' => 'Varchar', 
     'Description' => 'Varchar', 
    ); 

    private static $many_many = array (
     'RelatedServices' => 'Service' 
    ); 

    private static $belongs_many_many = array (
     'ParentServices' => 'Service' 
    ); 

    public function getCMSFields() { 
     $fields = FieldList::create(TabSet::create('Root')); 
     $services = $this->get()->where("\"Service\".\"Name\" != '$this->Name'")->map('ID', 'Name')->toArray(); 
     $fields->addFieldsToTab('Root.Main', array(
      TextField::create('Name'), 
      TextField::create('Description'), 
      ListBoxField::create('RelatedServices', 'Related services')->setMultiple(true)->setSource($services) 
     )); 
     return $fields; 
    } 
} 
+0

Danke, habe ich denke, es sollte mir nur beziehen, sondern auf den Rahmen neu zu sein, war nicht sicher, wie die MANY_MANY, belongs_many_many funktionieren würde. – Rudiger

Verwandte Themen