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);