Modell

Modell

Das Datenmodell ist eine Sammlung von Schlüssel-Wert-Paaren zur Abbildung des internen Datenmodells.

class myDataset extends \Alvine\Application\Web\Model\Generic {
  protected $myKey;
  protected $myValue; 
}

Das Datenmodell kann einfach mittels der Schreib-Methode der Anwendung abgespeichert werden. Im folgenden Fall werden Daten vom Typ StringType und myDataset in einer Riak-Datenbank gespeichert.

application.persistence.mydef.class=\Alvine\Persistence\Provider\Riak\DataObject
application.persistence.mydef.reference=myDataset,\Alvine\Types\String
application.persistence.mydef.uri=riak://riak01.intranet.schukai.net/riak/test

Der Solr-Index wird dann über folgende Anweisung konfiguriert. Auch hier können mehrere Typen durch Komma getrennt werden.

application.storageindex.mydef.class=\Alvine\Persistence\Provider\Solr\IndexObserver
application.storageindex.mydef.reference=myDataset,\Alvine\Types\String
application.storageindex.mydef.finder=\Alvine\Persistence\Provider\Solr\IndexObserver
application.storageindex.mydef.uri=http://solrexample.com/solr/alvine-objectindex

Mapping

Zuweisen von Namen und Typen können über die Metode Generic::getIndexDocument() erfolgen. In dieser Methode muss die Zuweisung zwischen interner Datenstruktur und Indexdokument erfolgen.

class myDataset extends \Alvine\Application\Web\Model\Generic {
  protected $myKey;

  public function getIndexDocument() {
    $indexObject = new \Alvine\Persistence\Find\IndexDocument($this->getClass(), $this->getID());
    $indexObject->setValue('string_key', (string) $this->myKey);
    return $indexObject;
  }

}

Dynamisches Mapping

Wird die Methode Generic::getIndexDocument() nicht überschrieben, wird die vordefinierte Methode zum automatischen Erstellen eines Indexdokuments verwendet.

/** Dataset */
$dataset = new \Alvine\Application\Web\Model\Generic();

/** Werte definieren */ 
$string = new \Alvine\Types\String('Hallo Welt!');
$dataset->setValue('mytext', $string);
$dataset->setValue('myflag', true);
$dataset->setValue('myinteger', 556);
$dataset->setValue('mydate', new \Alvine\Date\Date(1920, 12, 2));
$dataset->setValue('mydatetime', new \Alvine\Date\DateTime(1920, 13, 4, 12, 0, 0));
/** Schreiben des Datasets in den Speicher der Anwendung */
$this->assembly->writeObject($dataset);

Konfiguration in der Route