Empfehlungen: Erweiterte Suche

Probleme mit 1:1 (hasOne) Beziehung

Datenbankobjekte strukturieren und validieren

Probleme mit 1:1 (hasOne) Beziehung

Beitragvon getit » Mo 23. Feb 2009, 16:17

Hallo,

ich habe folgende Beziehung
uml.gif
uml.gif (2.08 KiB) 324-mal betrachtet


Folgende Models:
Code: Alles auswählen

<?php
class Client extends AppModel {
        ...
    var $hasOne = array('Process');
        ...
}
?>
 

Code: Alles auswählen

<?php
class Process extends AppModel {
        ...
    var $hasOne = array('Client');
}
?>
 


Und greife über den Clients-Controller mit der Action add() zu (http://localhost/test/clients/add)
Code: Alles auswählen

function add() {
    if (!empty($this->data)) {
        $this->Client->create();
        if ($this->Client->save($this->data)) {
            $this->Session->setFlash('Der Klient wurde angelegt.');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash('Der Klient konnte nicht angelegt werden.');
        }
    }
    $this->set('processes', $this->Client->Process->find('list'));
}
 


Es ergeben sich 2 Probleme beim Zugriff auf http://localhost/test/clients/add:
1. Das Feld 'date_of_meeting' in der processes-Tabelle wird nicht als Datum sondern als Textfeld angezeigt :?:
2. Jegliche Eingaben in Felder die aus der processes-Tabelle kommen werden nicht gespeichert :?:

Hat cake Probleme mit hasOne-Beziehungen?
Hat jemand eine Idee, wo der Fehler liegt (oder wie man ihn beseitigt)?

P.S.: Der Fremdschlüssel muss in der processes-Tabelle (client_id) sein.
Ein Fremdschlüssel in beiden Tabellen (processes:client_id, clients:process_id) ist ja bei einer 1:1-Beziehung sinnlos (trotzdem getestet).
Ein Fremdschlüssel nur in der clients-Tabelle funktioniert nicht - cake meldet beim Aufruf der URL nen Fehler in der sql Abfrage.
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Probleme mit 1:1 (hasOne) Beziehung

Beitragvon getit » Mo 23. Feb 2009, 17:30

Ich habe mir mal in dem Template (/views/clients/app.ctp) mal das Array 'processes' ausgeben lassen:
Code: Alles auswählen

pr($processes);
 

das eigentlich im Controller/add übergeben werden sollte
Code: Alles auswählen

$this->set('processes', $this->Client->Process->find('list'));
 


und das ist leer.
Damit habe ich den Fehler gefunden. Aber warum geht das nicht?
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Probleme mit 1:1 (hasOne) Beziehung

Beitragvon euromark » Mo 23. Feb 2009, 17:48

auch eine HasOne Beziehung sollte meiner Ansicht nach aus
1x HasOne
1x BelongsTo

bestehen

die starke entität ist doch hier sicher der Client (aus deiner Information "Der Fremdschlüssel muss in der processes-Tabelle (client_id) sein")
warum dann nicht

Client hasOne P
P belongsTo Client

?

Ich glaube du setzt mit deinem Prinzip ungültige Relationen, was dann zum fehlerhaften Backen/Query und CO führt
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Probleme mit 1:1 (hasOne) Beziehung

Beitragvon getit » Mo 23. Feb 2009, 18:56

@euromark
Client hasOne P
P belongsTo Client

funktioniert leider auch nicht :( .

Ich habs auch mal anders herum probiert. Gleiches Ergebnis. :(
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Probleme mit 1:1 (hasOne) Beziehung

Beitragvon Alex » Di 24. Feb 2009, 11:24

Was generiert er denn bisher für SQL-Queries und wie sieht dein View aus, in dem das Formular gebaut wird.
Alex
 
Beiträge: 120
Registriert: Di 13. Mai 2008, 13:39
Wohnort: Bremen
CakePHP-Version: 1.x.x
OS: OSX / Win 7 / Debian

Re: Probleme mit 1:1 (hasOne) Beziehung

Beitragvon euromark » Di 24. Feb 2009, 15:38

andersrum kannst du es nur probieren, wenn du
auch das foreign_key field im Client table machst :)

jedenfalls sollte meine obige lösung funktionieren, klappt bei mir jedenfalls reibungslos mit meinen HasOne Beziehungen.
Sehr nett, wenn man UUIDs verwendet:
Man spart sich seinen 2. (unterschiedlichen) primary Key, weil man dann die ID des Clients dafür mitbenutzen kann,
was die Verwaltung von HasOne sehr bequem macht
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Probleme mit 1:1 (hasOne) Beziehung

Beitragvon getit » Di 24. Feb 2009, 16:31

@euromark
Was meinst du mit uuid?

Man spart sich seinen 2. (unterschiedlichen) primary Key, weil man dann die ID des Clients dafür mitbenutzen kann,
was die Verwaltung von HasOne sehr bequem macht

Kannst Du das mal erklären - stehe jetzt weng auf dem Schlauch nachdem ich mich jetzt schon 2 Tage mit dem gl. Problem rum ärgere.

Das ist mein UML (hier mit fk bei progress):
client_progress(1-n)_uml.gif
client_progress(1-n)_uml.gif (32.42 KiB) 283-mal betrachtet


Das ist mein Layout (damit Ihr euch mal vorstellen könnt was ich will):
client_progress(n-1)_screenshot.gif
client_progress(n-1)_screenshot.gif (24.2 KiB) 284-mal betrachtet


Im oberen linken div werden alle Patientendaten eingetragen. (Funktioniert)
Im oberen rechten div werden alle möglichen Gruppen ausgewählt. (Funktioniert).
Im unteren Frame soll der Verlauf (aus der Tabelle 'progresses' angezeigt werden - später auch noch die Gruppendaten der ausgewählten Gruppen). Das funktioniert leider nicht :(
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Probleme mit 1:1 (hasOne) Beziehung

Beitragvon Alex » Di 24. Feb 2009, 16:52

Ich glaube ich hab irgendwas nicht ganz richtig gelesen. Haben die clients nun mehrere progresses oder nur einen?
Alex
 
Beiträge: 120
Registriert: Di 13. Mai 2008, 13:39
Wohnort: Bremen
CakePHP-Version: 1.x.x
OS: OSX / Win 7 / Debian

Re: Probleme mit 1:1 (hasOne) Beziehung

Beitragvon getit » Di 24. Feb 2009, 16:55

Wie im UML:
Jeder Klient hat einen Verlauf.
Ein Verlauf gehört zu einem Klienten.
getit
 
Beiträge: 105
Registriert: Mo 22. Dez 2008, 13:06
CakePHP-Version: 1.2.1.8004
OS: Vista

Re: Probleme mit 1:1 (hasOne) Beziehung

Beitragvon euromark » Di 24. Feb 2009, 22:31

aber ich muss Alex recht geben... hier stimmt irgendwas nicht

du kannst von cake hier in dem fall nur erwarten dess es dir EINEN (oder keinen) Progress anzeigt bzw anlegen lässt
allein aus der Relation heraus.
Warum willst du hier ein Dropdownmenü?


PS: vergiss das mit den UUIDs (kannste ggf im cake handbuch nachlesen), du solltest erstma das so zum Laufen bekommen.
Es sind unique Keys (im gegensatz zu auto-inc.), mit denen sich machnes recht komfortabel lösen lässt. gerade auch tabellenübergreifend
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Nächste

Zurück zu Models

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron