Hi! i'm very newbie in Silverstripe, and here i'm again with a question.
Here are my clases so you can see the relationships.
class Partido extends Page {
static $db = array(
'Resultado' => 'Varchar',
'Fecha' => 'date',
'GolesRojo' => 'int',
'GolesNegro' => 'int'
);
static $has_many = array(
'Equipos' => 'Equipo',
'Puntuaciones' => 'Puntuacion
public function getCMSFields() {
$fields = parent::getCMSFields();
$dateField = new DateField('Fecha');
$dateField->setConfig('showcalendar', true);
$fields->addFieldToTab('Root.Main', $dateField, 'Content');
$fields->addFieldToTab("Root.Main", new TextField("Resultado"), 'Content');
$config = GridFieldConfig_RecordEditor::create();
$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(
'Color' => 'Color'
));
$equipos = new GridField(
'Equipos', // Field name
'Equipo', // Field title
$this->Equipos(),
$config
);
$fields->addFieldToTab('Root.Equipos', $equipos);
return $fields;
}
class Equipo extends DataObject {
static $db = array(
'Color' => 'Varchar',
);
static $many_many = array(
'Jugadores' => 'Jugador'
);
static $has_one = array(
'Partido' => 'Partido'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$field = new DropdownField('PartidoID', 'Partido', Partido::get()->map('ID', "CustomTitle"));
$field->setDisabled(true);
$field->performDisabledTransformation();
$fields->push($field);
$config = GridFieldConfig_RelationEditor::create();
$config->removeComponentsByType('GridFieldAddNewButton');
$config->getComponentByType('GridFieldAddExistingAutocompleter')->setSearchFields(array('Nombre', 'Apellido'))->setResultsFormat('$Nombre - $Apellido');
$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(
'Nombre' => 'Nombre',
'Apellido'=> 'Apellido',
'Puntuaciones.Puntos' => "Puntos"
));
$puntuaciones = new GridField(
'Jugadores', // Field name
'Jugador', // Field title
$this->Jugadores(), // List of all related students
$config
);
$fields->addFieldToTab('Root.Main', $puntuaciones);
return $fields;
}
}
class Jugador extends DataObject {
static $db = array(
'Nombre' => 'Varchar',
'Apellido' => 'Varchar'
);
static $has_many = array(
'Puntuaciones' => 'Puntuacion',
);
static $belongs_many_many = array(
'Equipos' => 'Equipo',
);
public function getCustomTitle() {
return $this->Nombre." ".$this->Apellido;
}
public function getCMSFields() {
$fields = parent::getCMSFields();
$field = new TextField('PuntosID', 'Puntaje', $this->Puntuaciones.PuntosID);
$fields->push($field);
/*$fields->addFieldToTab("Root.Main", new TextField("Nombre"), 'Content');
$fields->addFieldToTab("Root.Main", new TextField("Apellido"), 'Content');
$fields->addFieldToTab("Root.Main", new TextField("Puntos"), 'Content');
return $fields;
// Name, Description and Website fields
$config = GridFieldConfig_RelationEditor::create();
// Set the names and data for our gridfield columns
$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(
'Puntos' => 'Puntos',
//'Project.Title'=> 'Project' // Retrieve from a has-one relationship
));
/*return new FieldList(
new TextField('Nombre', 'Nombre'),
new TextField('Apellido', 'Apellido'),
new DropdownField(
'Puntuacion',
'Puntuacion',
//Puntuacion::get()->map("Puntos", "Puntos")
)
//new TextField('Puntuacion.Puntos', 'Puntuacion')
//new GridField("Puntuacion", "Puntuacion", $this->Puntos(), $config, $this)
);*/
$jugador = Jugador::get()->byID($this->ID);
if($jugador){
$config = GridFieldConfig_RelationEditor::create();
$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(
'Puntos' => 'Puntos'
));
$equipos = new GridField(
'Puntuaciones', // Field name
'Puntuacion', // Field title
$this->Puntuaciones(), // List of all related students
$config
);
$fields->addFieldToTab('Root.Main', $equipos);
}
return $fields;
}
/*static $searchable_fields = array(
'Nombre',
'Apellido'
// leaves out the 'Price' field, removing it from the search
);*/
public function partido(){
$quipo = Equipo::get()->filter(array("JugadorID" => $this->id));
Debug::show($equipo);
}
}
class Puntuacion extends DataObject {
static $db = array(
'Puntos' => 'Varchar',
);
static $has_one = array(
'Jugador' => 'Jugador',
'Partido' => 'Partido'
);
public function getCMSFields() {
//Debug::show($this);
$fields = parent::getCMSFields();
$fields->push(new TextField('Puntos', 'Puntaje'));
$field = new DropdownField('JugadorID', 'Jugador', Jugador::get()->map('ID', "CustomTitle"));
$field->setDisabled(true);
$field->performDisabledTransformation();
$fields->push($field);
$partido = Partido::get()->filter( array("ID" => $this->PartidoID));
$partido = new TextField("PartidoID", "sarasa", $partido->ID);
$partido = $partido->setDisabled(true);
$partido->performDisabledTransformation();
$fields->push($partido);
$fields->push($field);
return $fields;
}
}
In this image the relarionships see better.
to add a "Puntuacion" are the next steps.
1. add a new "Partido".
2. Inside the "partido" whit GridField add a new "Equipo".
3 Inside the "Equipo" whit another Gridfield, link existings "Jugador". so far so good and working.
4. inside the "Jugador" whit another gridfield for "Puntuaciones" try to add a "Puntuacion" but wen the screen of new "Puntuacion" shows, I lost the "Partido" relation.
in other words I dont know to which partido i'm going to record the "Puntuacion", only the "JugadorID" remains, and I have to set manually with a dropdowfiel or something the PartidoID and this is what I dont want.
I hope you understand what the problem is and any help will be grateful.
Bye!
PD: Sorry about my poor english!!!