Empfehlungen: Erweiterte Suche

Nochmal 2 Tabellen verknüpfen

Datenbankobjekte strukturieren und validieren

Nochmal 2 Tabellen verknüpfen

Beitragvon tgollenia » Fr 12. Dez 2008, 16:47

Hey Leute,

habe folgendes Problem:

Ich baue gerade eine Bücherdatenbank auf, mit Buchtitel, Erscheinungsjahr, Autoren etc.

folgende DB-Struktur: http://www.loaditup.de/301469.html

Jetzt möchte ich mit dem view posts (Bücher) alle Bücher ausgeben mit Titel, Erscheinungsjahr usw., soweit kein Problem.

Aber ich möchte dynamisch mittels der Mappe-Tabelle, dass die Autoren des Buches mit ausgegeben werden (also eine Verknüpfung der Tabellen).

Die Frage ist nur wie realisieren ich das mittels Cake? Bin noch Neuling :(

Danke im Voraus.
tgollenia
 
Beiträge: 10
Registriert: Fr 12. Dez 2008, 15:24

Re: Nochmal 2 Tabellen verknüpfen

Beitragvon euromark » Fr 12. Dez 2008, 16:58

ich würde in erster linie mich näher an der cake namenskonvention orientieren, damit wird vieles einfacher

englisch:
- authors
- posts

posts:
- id
- description
- publisher_company
- pulished (date)
- created (optional - wird automatisch mit erstelldatum belegt)

authors:
- id
- name
- email

in mappers (bräuchte man bei 1:n eignetlich gar nicht)
müsste es dann auch
author_id
und
post_id
heißen

zur erklärung warum du mappers nicht brauchst:
- die author_id kann bei den posts einfach mit in die DB "eingefügt" werden (wie du mit "autoren" wohl schon angedeutet hast).


dann können per console und baking sehr einfach
die entsprechenden verknüpfungen automatisiert werden,
was dein "anfänger" leben 10x einfacher macht :)

in dem fall erkennt die konsole
- post belongsTo author
- author hasMany posts

gruß Mark
euromark
 
Beiträge: 643
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Nochmal 2 Tabellen verknüpfen

Beitragvon tgollenia » Sa 13. Dez 2008, 20:52

Ja vielen Dank erstmal. Werde mal schauen, ob ichs hinbekomme!
tgollenia
 
Beiträge: 10
Registriert: Fr 12. Dez 2008, 15:24

Re: Nochmal 2 Tabellen verknüpfen

Beitragvon Mathias » So 14. Dez 2008, 01:48

Eine dritte Tablle brauchst du nur wenn du eine n:m Beziehung darstellen möchtest. Nur noch mal als Ergänzung ;)
Und was mich auch noch äußerst verblüfft hat, dass cake den Unterschied zwischen created und updated erkennt. Somit wird created nur einmal geschrieben, woei updated halt erneuert wird (wie der name ja schon sagt)
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Nochmal 2 Tabellen verknüpfen

Beitragvon Flo » So 14. Dez 2008, 20:00

klar ;-) cake kennt doch deine Tabellenfelder... leg dochmal bei debug:0 ein neues tabellenfeld an und versuche mit Cake nen Insert drauf zu machen... wirste scheitern, wenn du nicht debug anmachst oder den Modelcache manuell löschst :)
Flo
 
Beiträge: 85
Registriert: Mi 11. Jun 2008, 20:48
Wohnort: Bielefeld
CakePHP-Version: 1.3
OS: Mac OSX 10.6

Re: Nochmal 2 Tabellen verknüpfen

Beitragvon Mathias » Mo 15. Dez 2008, 01:31

Selbst wenn man im Debug arbeitet, kann es dir passieren, dass du mit den alten Models arbeitest, weil der Cache einfach nicht geleert. Manchmal hat mich das schon Nerven gekostet. Passiert halt, wenn man den Cache vergisst ;)

Jetzt ist mir ja auch klar, dass cake meine Felder kennt. Aber ich finds einfach toll, dass cake es kennt. Es nimmt einfach viel Arbeit ab. Gibts eigentlich eine Liste davon, welche Felder cake automatisch mit Werten belegt (wie z.B. created, modified, updated)?
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Nochmal 2 Tabellen verknüpfen

Beitragvon euromark » Mo 15. Dez 2008, 02:03

@mathias

ja, deswegen hab ich mir eigens dafür in jedem projekt ein configurations controller,
der eine action "deleteCache" hat, die speziell nur dafür da ist, per klick alle caches schnell zu löschen (rekursives ordnerleeren).
einfach quasi immer 1x ausführen, wenn man n update auf die Seite gespielt hat (im netz manuell mit ftp is mir zu mühselig..)

naja, so viel "automagic" felder sinds ja nich (updated? kannte ich bisher gar nich, was is der unterschied zu modified?)^^
euromark
 
Beiträge: 643
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Nochmal 2 Tabellen verknüpfen

Beitragvon euromark » Mo 15. Dez 2008, 02:07

AHA!

There are three columns which are automagically filled by CakePHP if they exist: “created”, “updated”, and “modified”. It is probably obvious that “created” is filled at the time a record gets inserted into the database. And “updated” and “modified” when a record is changed.

But what’s the difference between “updated” and “modified”? Well, there is none. You can either use “updated” or “modified”, just don’t use both as that is redundant. And whichever column name you choose, use it throughout your database to be consistent!


nun sind wir alle schlauer :)
euromark
 
Beiträge: 643
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Nochmal 2 Tabellen verknüpfen

Beitragvon Luckie » Mo 8. Jun 2009, 11:44

euromark hat geschrieben:dann können per console und baking sehr einfach
die entsprechenden verknüpfungen automatisiert werden,
was dein "anfänger" leben 10x einfacher macht :)

in dem fall erkennt die konsole
- post belongsTo author
- author hasMany posts

Ich habe jetzt ein ähnliches Problem, nur dass mein Projekt schon Models, Controller und Views hat, so dass ich mir diese mit bake wieder überschreiben würde.

Ich habe folgende Tabellen:
posts:
- id
- user_id
- titel
- inhalt
- created
- modified

users:
- id
- username
- password

Die user_id habe ich erstmal von Hand in der Datenbank ausgefüllt.

Jetzt will ich, dass, wenn er die Tabelle posts anzeigt zu der user_id den zugehörigen Namen ausgibt, also beide Tabellen verknüpft werden. Wie mache ich das denn jetzt?

OK, ich glaube die verknüpfung habe ich. Im Model post:
Code: Alles auswählen
var $hasone = 'User';
und im model user:
Code: Alles auswählen
var $belongsTo = 'Post';
. Aber wie mache ich jetzt die Ausgabe im View, dass e rmir zur user_id den Benutzernamen ausgibt?

Ich habe schon mal folgendes probiert:
Code: Alles auswählen
<td><?php echo $user->find($post['Post']['user_id'])?></td>&amp;code
Das liefert folgenden Query
[code]SELECT `Post`.`id`, `Post`.`user_id`, `Post`.`titel`, `Post`.`inhalt`, `Post`.`created`, `Post`.`modified`, `User`.`id`, `User`.`username`, `User`.`password` FROM `posts` AS `Post` LEFT JOIN `users` AS `User` ON (`User`.`post_id` = `Post`.`id`) WHERE 1 = 1[/code]
Ist ja schon mal gar nicht schlecht. Nur die ON-Klausel stimmt natürlich nicht. Da müsste stehen:
[code]User.id = Post.user_id
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Nochmal 2 Tabellen verknüpfen

Beitragvon Luckie » Mo 8. Jun 2009, 14:41

Ich habe festegestellt, dass der Fehler schon kommt, wenn ich nur $hasOne und $belongsTo setze. Hat also mit dem find-Aufruf nichts zu tun.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Nächste

Zurück zu Models

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 1 Gast