GORM für Einsteiger

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Antworten
Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

GORM für Einsteiger

Beitrag von ma2604121 » 02.08.2011, 13:23:14

Ich möchte mich nun auch am GORM versuchen. Aber ich bin mir bzgl. der Vorgehensweise noch nicht sicher.

Als Ausgangsbasis kann ich mir eine simple "Bücherverwaltung" vorstellen. D.h. es gibt drei Tabellen in die folgenden Daten eingetragen werden sollen:
Tabelle user
  • user_id
  • user_name
Tabelle books
  • book_id
  • book_title
Tabelle rel_user_books
  • user_id
  • book_id
Jetzt benötige ich laut Doku zwei Konfigurationsdateien. Die dürften demnach wie folgt lauten:

Code: Alles auswählen

DEFAULT_books_objects.ini
DEFAULT_books_relations.ini
Wie so oft, frage ich mich natürlich, wo die nun genau sein müssen...?
Irgendwo unter /apps/config vermute ich?

Der Inhalt der DEFAULT_books_objects.ini dürfte folgendermaßen aufgebaut sein:

Code: Alles auswählen

[user]
user_name = "VARCHAR(100)"

[books]
book_title = "VARCHAR(100)"
Aber wie definiere ich hier z.B. ein auto_increment-Feld (z.B. user_id)? Oder muss das hier gar nicht rein?

Die DEFAULT_books_relations.ini hätte folgenden Aufbau:

Code: Alles auswählen

[User2Book]
Type = "COMPOSITION"
SourceObject = "user"
TargetObject = "book"
Bin ich damit auf dem richtigen Weg oder habe ich mich schon verirrt??

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: GORM für Einsteiger

Beitrag von Screeze » 02.08.2011, 13:30:51

Wie so oft, frage ich mich natürlich, wo die nun genau sein müssen...?
Irgendwo unter /apps/config vermute ich?
Richtig, irgendwohin unter apps/config, wohin genau ist egal, den pfad gibst du später dem GORM mit.
Der Inhalt der DEFAULT_books_objects.ini dürfte folgendermaßen aufgebaut sein:
Jap, allerdings würde ich die Objekte mit einem Großbuchstaben beginnen lassen, und wenn du der Apf-Konvention folgen willst, würde ich statt der Unterstrich-schreibweise eher "UserName" und "BookTitle" verwenden.
Aber wie definiere ich hier z.B. ein auto_increment-Feld (z.B. user_id)? Oder muss das hier gar nicht rein?
Das Feld UserId wird automatisch angelegt, genauso wie BookId, diese sind Primärschlüssel und autoincrement.
Die DEFAULT_books_relations.ini hätte folgenden Aufbau:
Die Frage ist ob du hier eine COMPOSITION oder eine ASSOCIATION haben möchtest, wenn das für dich so passt, dann stimmt der Rest. (Außer du änderst das oben mit der Großschreibung, dann musst du das hier auch nochmal anpassen)

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: GORM für Einsteiger

Beitrag von Megger » 02.08.2011, 13:56:16

Richtig, irgendwohin unter apps/config, wohin genau ist egal, den pfad gibst du später dem GORM mit.
Um da nochmal genauer drauf einzugehen:
GORM beziehst du über die GORMFactory

Code: Alles auswählen

$gorm = $gormf->getGenericORMapper($configNamespace, $configNameAffix, $connectionName);
 
Der Pfad zur Config Datei setzt sich dann wie folgt zusammen:
/apps/config/<$configNamespace>/<Context>/<Environment>_<$configNameAffix>_objects.ini

Also zum Beispiel (Context = apf, Environment = DEFAULT)

Code: Alles auswählen

$gorm = $gormf->getGenericORMapper('mysite::bookmanager', 'books', 'MySQLi');
 
/apps/config/mysite/bookmanager/apf/DEFAULT_books_objects.ini

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 02.08.2011, 14:26:42

Ah ja! Dann werde ich das mal entsprechend umsetzen.

Wenn ich die o.g. Konfigurationsdateien erstellt habe, verwende ich setup.php unter /apps/modules/genericormapper/data/tools/, um mir damit die Datenbanktabellen zu erstellen (wobei mit dem Tool dann auch automatisch die notwendigen auto_increment-Felder erzeugt werden??

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: GORM für Einsteiger

Beitrag von Megger » 02.08.2011, 14:29:54

Jep, wenn du das SetupTool oder das UpdateTool verwendest, dann wird alles benötigte angelegt (ich persönlich würde das UpdateTool nutzen, so kannst du es später einfach direkt nochmal durchlaufen lassen, sollte sich etwas an deinen Konfigurationsdateien ändern
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 02.08.2011, 19:38:19

Oh man, die Konfiguration des APF treibt mich irgendwann noch in den Wahnsinn... :roll:
Das ist wirklich eines meiner größten Probleme: Wo muss was hin, damit etwas funktioniert... :|

Was muss ich denn nun schon wieder alles beachten, damit ich die setup.php oder update.php zum Laufen bekomme?

Ich brauche eine Datenbankkonfiguration (/apps/config/database/DEFAULT_connections.ini):

Code: Alles auswählen

[MySQL]
DB.Host = "localhost"
DB.User = "user"
DB.Pass = "pass"
DB.Name = "apf_gorm"
DB.Type = "MySQLx"
DB.Charset = "utf8"
Dazu die Dateien DEFAULT_books_objects.ini

Code: Alles auswählen

[User]
UserName = "VARCHAR(100)"

[Books]
BookTitle = "VARCHAR(100)"
und DEFAULT_books_relations.ini

Code: Alles auswählen

[User2Books]
Type = "COMPOSITION"
SourceObject = "User"
TargetObject = "Books"
Die habe ich unter /apps/config/modules/gorm gespeichert.

Die setup.php sieht derzeit wie folgt aus:

Code: Alles auswählen

<?php
   // include page controller
   require('../../../../../apps/core/pagecontroller/pagecontroller.php');

   // configure the registry if desired
   //Registry::register('apf::core','Environment','DEV');

   // include SetupMapper
   import('modules::genericormapper::data::tools','GenericORMapperSetup');

   // create setup tool
   $setup = new GenericORMapperSetup();

   // set Context (important for the configuration files!)
   $setup->setContext('gorm');

   // adapt storage engine (default is MyISAM)
   //$setup->setStorageEngine('MyISAM|INNODB');

   // adapt data type of the indexed columns, that are used for object and relation ids
   //$setup->setIndexColumnDataType('INT(5) UNSIGNED');

   // create database layout
   $setup->setupDatabase('modules::gorm','books','MySQL');

   // display statements only
   $setup->setupDatabase('config::modules::gorm','books');
?>
Dazu gibt es natürlich eine entsprechende (derzeit leere) Datenbank namens apf_gorm.

Und beim Ausführen gibt es folgendes:

Code: Alles auswählen

Type: 	ConfigurationException
Message: 	[IniConfigurationProvider::loadConfiguration()] Configuration with namepace "modules::gorm", context "gorm", language "de", environment "DEFAULT", and name "books_objects" cannot be loaded!
Number: 	256
File: 	/var/www/apf1/apps/core/configuration/provider/ini/IniConfigurationProvider.php
Line: 	77
Ich verzweifel irgendwann noch...

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: GORM für Einsteiger

Beitrag von Screeze » 02.08.2011, 19:40:51

Dir fehlt der Context-Ordner in den Config Ordnern jeweils wie es aussieht.
Wenn du den nicht willst, kannst du das aber deaktivieren, mich störte der subfolder auch immer. Wie das geht steht hier:
http://adventure-php-framework.org/Seit ... mitContext

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 02.08.2011, 19:53:04

Stehe auf dem Schlauch...

Code: Alles auswählen

   $langProv = new IniConfigurationProvider();
   $langProv->setOmitContext(false);
   ConfigurationManager::registerProvider('lang', $langProv); 
Um diese Zeilen geht es... Die müssen also in die setup.php?

Habe ich probiert. Direkt nach dem Einbinden des Pagecontrollers. Am Resultat ändert sich ncihts...

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: GORM für Einsteiger

Beitrag von Megger » 02.08.2011, 20:17:40

Beim registerProvider muss ini stehen anstatt lang, weil ansonsten der Provider nur für Config Dateien mit .lang Endung funktioniert
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 02.08.2011, 20:21:37

Was nichts an der Fehlermeldung ändert...

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: GORM für Einsteiger

Beitrag von Megger » 02.08.2011, 21:59:26

Musst omitContext auch auf true setzen
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 02.08.2011, 22:15:01

Mein Fehler, das habe ich oben falsch reinkopiert. setOmitContext ist auf true gesetzt und ergibt den folgenden Fehler:

Code: Alles auswählen

Type: 	ConfigurationException
Message: 	[IniConfigurationProvider::loadConfiguration()] Configuration with namepace "core::database", context "gorm", language "de", environment "DEFAULT", and name "connections.ini" cannot be loaded!
Number: 	256
File: 	/var/www/apf1/apps/core/configuration/provider/ini/IniConfigurationProvider.php
Line: 	77
Ok, das konnte ich nun beheben.
Die DEFAULT_connections.ini musste direkt in /apps/config/core/database sein.

Stattdessen kommt die nächste Meldung:

Code: Alles auswählen

Type: 	ConfigurationException
Message: 	[IniConfigurationProvider::loadConfiguration()] Configuration with namepace "config::modules", context "gorm", language "de", environment "DEFAULT", and name "books_objects" cannot be loaded!
Number: 	256
File: 	/var/www/apf1/apps/core/configuration/provider/ini/IniConfigurationProvider.php
Line: 	77

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: GORM für Einsteiger

Beitrag von Screeze » 02.08.2011, 22:46:01

Vergleich mal die Fehlermeldungen, vielleicht findest du es dann selber ;)
and name "connections.ini"
and name "books_objects"

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: GORM für Einsteiger

Beitrag von ma2604121 » 02.08.2011, 23:05:51

Kein Plan, was ich falsch mache. Ich habe die books_objects.ini und die books_relations.ini inzwischen in so ziemlich jedem Verzeichnis stehen - es geht dennoch nicht.

Und wieso bei der einen Fehlermeldung ein .ini hinten dran ist und bei der anderen nicht, kann ich ebenfalls nicht nachvollziehen. Wobei die erste Fehlermeldung eh erledigt ist. Das lag daran, dass die .ini-Datei nicht im richtigen Ordner war (wo ich mal wieder bei meinem "Hass-Thema" wäre: Wo müssen im APF welche Dateien hin, damit etwas funktioniert...???)

Momentan sieht meine setup.php wie folgt aus:

Code: Alles auswählen

   require('../../../../../apps/core/pagecontroller/pagecontroller.php');
   $langProv = new IniConfigurationProvider();
   $langProv->setOmitContext(true);
   ConfigurationManager::registerProvider('ini', $langProv);
   import('modules::genericormapper::data::tools','GenericORMapperSetup');
   $setup = new GenericORMapperSetup();
   $setup->setContext('gorm');
   $setup->setupDatabase('config::modules::gorm','books','MySQL');
   $setup->setupDatabase('config::modules::gorm','books'); 
Was mir folgende Meldung beschert:

Code: Alles auswählen

[IniConfigurationProvider::loadConfiguration()] Configuration with namepace "config::modules::gorm", context "gorm", language "de", environment "DEFAULT", and name "books_objects" cannot be loaded!
Wieso es bei der connections.ini funktioniert und bei den anderen nicht, will mir derzeit nicht einleuchten...

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: GORM für Einsteiger

Beitrag von Screeze » 02.08.2011, 23:17:03

Seit der Umstellung auf die Möglichkeit, dass mehrere Provider für unterschiedliche Dateiendungen registriert werden müssen, muss die Dateiendung der Configdateien beim Name mit angegeben werden, damit das APF weiß welcher Provider verwendet werden soll.

Allerdings sehe ich gerade dass du ja schon beim Setup hängst. Die Fehlermeldung in der Form wie du sie bekommst darf bei dem Code unten nicht auftreten, solange deine Dateien aktuell sind. Ich habe extra nochmal den (aktuellen) Code zurate gezogen.

Ich habe mich mal an den Aufrufen ab setupDatabase() entlangehangelt, und bin bis in die Funktion BaseMapper::createMappingTable() gekommen.
Genauer gesagt in Zeile 271 der BaseMapper.php, die da lautet:

Code: Alles auswählen

$objectsConfig = $this->getConfiguration($this->configNamespace, $this->configNameAffix . '_objects.' . $this->getConfigFileExtension()); 
Selbst wenn die fileExtension die geladen wird leer sein sollte (was nicht der Fall ist da sie mit ini vorbelegt ist) würde trotzdem noch ein Punkt hinter books_object im Name stehen, also "books_objects."
Das sagt mir dass du offenbar immer noch nicht die aktuellen Sourcen hast..

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste