Portal > Foren > PHP > PEAR, PECL und Frameworks > Symfony - Database / Model Layer
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 08.02.2007, 00:03 Nach oben    #1
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard Symfony - Database / Model Layer

Servus,

schlage mich grad mit symfony rum.
Bin nun beim Model Layer angekommen (http://www.symfony-project.com/book/...e-Model-Layer).
Ich hab nun folgendes Problem:

Ich verstehe nur Bahnhof.

Das liegt wohl u.a. daran, dass ich noch nie mit ORM gearbeitet habe. Wird aber hoffe noch.

Dort wird folgendes Beispiel genannt:



Jo... Sehr einfache und übersichtliche Tabellen.

Daher sieht die yml auch sehr einfach und übersichtlich aus.

Code:
propel:
  blog_article:
    _attributes: { phpName: Article }
    id:
    title:       varchar(255)
    content:     longvarchar
    created_at:
  blog_comment:
    _attributes: { phpName: Comment }
    id:
    article_id:
    author:      varchar(255)
    content:     longvarchar
    created_at:
Soweit so gut.

Nun hab ich aber ein relativ komplexes Datenbankdesign mit ca 50 Tabellen.
Angenommen mal ich möchte das nun umsetzen... Mit Propel (wer kommt auf son abstrusen Namen Oo) würden das ja gut 1000 Zeilen in der yml werden.

Es steht zwar dann im folgenden:
Zitat:
If you define nothing, symfony will guess the best attributes according to the column name
Das heißt doch im Grunde, ich muss nur den Namen benennen. Nehmen wir mal das Beispiel einer user-Tabelle

id
name
password

Woher will symfony wissen, dass das eine n int ist, das andere n string und das 3. n md5-hash?


Das sind aber erst noch Details.
Was mich bisher noch bissi gewundert hat... Warum muss ich das so dort definieren? Ich meine, der generiert dir zwar ne sql-Datei, die man bequem einbinden kann, aber wenn die schon existiert.. Wird das dann überflüssig?

Und überhaupt, was macht man, wenn sich paar Spalten ändern? Fragen über Fragen.
__________________
Vive la France! Welcome to Sarkoworld...
ljungi ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.02.2007, 10:15 Nach oben    #2
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von ljungi Beitrag anzeigen
Servus,

schlage mich grad mit symfony rum.
Bin nun beim Model Layer angekommen (http://www.symfony-project.com/book/trunk/08-Inside-the-Model-Layer).
Ich hab nun folgendes Problem:

Ich verstehe nur Bahnhof.

Das liegt wohl u.a. daran, dass ich noch nie mit ORM gearbeitet habe. Wird aber hoffe noch.
Das kann ich verstehen, da Propel schon komplex wirken kann, wenn man
nie damit gearbeitet hat. Ich kann dir da zwei Einführungen von Sebastian
Bergmanns Buch Professionelle Softwareentwicklung mit PHP 5 empfehlen,
dass könnte ein bisschen Licht ins Dunkel bringen.
Zitat:
Zitat von ljungi Beitrag anzeigen
Nun hab ich aber ein relativ komplexes Datenbankdesign mit ca 50 Tabellen.
Angenommen mal ich möchte das nun umsetzen... Mit Propel (wer kommt auf son abstrusen Namen Oo) würden das ja gut 1000 Zeilen in der yml werden.
Dazu Sage ich nur:
  1. installier dir das Er-Diagramm DBDesigner4
  2. erstelle dort das Design
  3. und Konvertier die DBDesinger-Datei (das im übringen in XML ist) mittels XLST in schema.xml. Siehe How to use DB Designer 4 to create your schema.xml
Diese Spezifikation des Datenmodells, schema.xml, wird von symfony, wenn
du den Task propel-build-(sql|model) ausführst, in schema.yml
umgewandelt und weiter verarbeiten. (Soweit ich weiss, wandelt symfony
die YML definitionen in XML um und schickt diese dann an den Propel
Generator weiter - egal). Ich zum Beilspiel, habe die Konvertierung mittels
Phing automatisiert.
PHP-Code:
<target name="generateSchema">
  <
move file="confing/schema.xml" tofile="confing/schema.xml~" overwrite="true"/>

  <echo 
msg="Generate Propelschema from DBDesigner4-File" />

  <
xslt file="data/model/dbdesigner4.xml" tofile="config/schema.xml" style="data/model/dbd2propel.xsl" />

</
target
Zitat:
Zitat von ljungi Beitrag anzeigen
Es steht zwar dann im folgenden:
Zitat:
If you define nothing, symfony will guess the best attributes according to the column name
Das heißt doch im Grunde, ich muss nur den Namen benennen. Nehmen wir mal das Beispiel einer user-Tabelle

id
name
password

Woher will symfony wissen, dass das eine n int ist, das andere n string und das 3. n md5-hash?
Hmm diese Eigenschaft kenne ich noch nicht. Muss auch ehrlich sagen das
ich sie nicht umbedingt kennenlernen will...

Zitat:
Zitat von ljungi Beitrag anzeigen
Das sind aber erst noch Details.Was mich bisher noch bissi gewundert hat... Warum muss ich das so dort definieren? Ich meine, der generiert dir zwar ne sql-Datei, die man bequem einbinden kann, aber wenn die schon existiert.. Wird das dann überflüssig?

Und überhaupt, was macht man, wenn sich paar Spalten ändern? Fragen über Fragen.
Die schema.(yml|xml) ist Primär, wie schon oben erklärt, nicht für die
Generierung des SQL-Schemas zuständig, sonder für den Propel Generator
der das ORM erstellt. Das generiern und importieren von SQL ist ein
zusätzliches Feature. Das bedeutet, wenn sich Spalten ändern sollten
änderst du es in der schema.(yml|xml) Datei und generiest das Model neu.
Hier noch ein Ausschnitt aus dem Buch Professionelle Softwareentwicklung
mit PHP 5
Zitat:
Der Propel-Generator erzeugt für jede Tabelle (beispielsweise author) unter anderem eine abstrakte Basisklasse (BaseAuthor), die sich von der abstrakten Klasse BaseObject der Propel-Laufzeitumgebung ableitet, sowie eine leere, aber konkrete Kindklasse (Author) hiervon.

Die abstrakte Klasse BaseAuthor aus unserem Buchkatalog-Beispiel enthält Methoden wie getFirstName() und setFirstName($v), um auf die Daten eines Autors lesend und schreibend zugreifen zu können. In der konkreten Kindklasse Author kann zusätzliche Logik implementiert werden. Diese geht nicht verloren, wenn die PHP-Klassen neu aus der XML-Spezifikation des Datenmodells erstellt werden.
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)

Geändert von dejan_spasic (08.02.2007 um 10:20 Uhr)
dejan_spasic ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.02.2007, 11:00 Nach oben    #3
Blubb... öfz
 
Benutzerbild von ljungi
 
Registriert seit: 16.03.2006
Ort: Berlin
Beiträge: 419
Standard

Danke, werd mich damit mal auseinandersetzen!
__________________
Vive la France! Welcome to Sarkoworld...
ljungi ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Symfony 1.0 freigegeben dejan_spasic Nachrichten 1 22.02.2007 11:18
div layer nebeneinander Orolhawion HTML, XML und CSS 7 10.03.2006 13:16
[CSS] Höhe von <div> Layer mag keine 100% WarrenFaith HTML, XML und CSS 15 19.08.2005 18:37
Database Abstraction Layer!? mvarga Datenbanken 5 28.06.2005 10:34


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45