Empfehlungen: Erweiterte Suche

Frage: verknüpfte Models in 1 View anzeigen?

Ausgabedaten formatieren und darstellen

Frage: verknüpfte Models in 1 View anzeigen?

Beitragvon mivogtLU » Mi 20. Jan 2010, 07:23

Hallo,

da ich mich in cake gerade einleben kommen derzeit massig Fragen von mir - hoffe mal auf Hilfe .. :)

Ich würde gerne in einer View Daten aus zwei oder mehr Modellen Anzeigen die in der DB auch miteinander verknüpft sind.
D.h. Ich ahbe in jeder betreffenden tabelle ein Feld id und wenn diese mit einander verknüpft sind auch das notwendige id_AndereTabelle drin.

In Cake wird nun der Fremdschlüssel angezeigt bzw dank dem name Attribut der Tabelle doer dem var $showField = 'dasFeld'; auch ein einzelnen Datenfeld aus dem zugehörigen Datensatz auf den der Fremdschlüssel im Modell verweist.

Nun würde ich gerne den kopmpletten Datensatz zum Fremdschlüssel mit anzeigen lassen.
Hat Cake dafür eine eigene Lösung an Bord oder muss ich mit php+sql selber in der view anfangen zu basteln und ir eine methode showForeignKeyData(key,table) einbauen?

Danke vorab.

Grüße

Michael
mivogtLU
 
Beiträge: 46
Registriert: Di 12. Jan 2010, 21:22
Wohnort: 67059
CakePHP-Version: 1.3 final
OS: Linux, Win XP-Vista

Re: Frage: verknüpfte Models in 1 View anzeigen?

Beitragvon mbrod » Mi 20. Jan 2010, 10:23

CakePHP bietet die Möglichkeit die Daten der assoziierten Models auszulesen. Siehe:
http://book.cakephp.org/view/439/recursive
Mit wenigen Zeilen Code kann man das Verhalten der Datenbankabfragen in Abhängigkeit von recursive studieren. Vorraussetzung ist natürlich, dass in den Tabellen schon mal ein paar Daten enthalten sind.
In meinem Projekt habe ich folgende Relationen:
relations.jpg
relations.jpg (15.5 KiB) 137-mal betrachtet

Im checkings_controller folgende Funktion einfügen:
Code: Alles auswählen
    function test(){
        $this->set('test',$this->Checking->find('first', array('recursive'=>'2')));
    }
 

Und in app/view/checkings/test.ctp:
Code: Alles auswählen
<?php
pr($test);
?>

Bei 'recursive'=>'-1' werden nur die Daten von Checking ausgegeben.
Bei 'recursive'=>'0' werden die Daten von Checking und User ausgegeben.
Bei 'recursive'=>'1' werden die Daten von Checking, User und Device ausgegeben. (1 Ebene nach "rechts")
Bei 'recursive'=>'2' werden die Daten von allen Models ausgegeben. (2 Ebenen nach "rechts" bzw. "unten". Bei mir 36 queries)
Man muss sich also überlegen, über welchen Controller man seine Daten abfragt, und über recursive festlegen, wieviel assozierte Daten ich brauche. Im view kann man dann über das mit set übergebene Array (hier im Beispiel $test) die Ergebnisse anzeigen. Die hier im Beispiel angegebene Abfrage find('first',...) ist natürlich auch nur als Beispiel zu sehen.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Frage: verknüpfte Models in 1 View anzeigen?

Beitragvon mivogtLU » Mi 20. Jan 2010, 11:49

vielen lieben dank, genau was ich brauche :)
mivogtLU
 
Beiträge: 46
Registriert: Di 12. Jan 2010, 21:22
Wohnort: 67059
CakePHP-Version: 1.3 final
OS: Linux, Win XP-Vista

Re: Frage: .. noch ne Frage

Beitragvon mivogtLU » Mi 20. Jan 2010, 12:49

So grds funktioniert der Code von dir.
Leider komme cih noch nicht ganz klar.
Darum frage ich nochmal konkret mit meinem Fall

[Kunde]-1:n-[Anfrage]-1:1-[Auftrag]
[Kunde]-1:n-[Auftrag]-1:n-[Positionen]


Nun will ich in der Anfrage den Kunden einblenden wenn ich sie sichte VIEW bzw in der Liste im Index den Kundennamen.

Ich würde, wenn ich recht verstehe,
die funktion test()
    - im AnfrageController
    - im AuftragController
einfügen

Und dann im
    -app/view/Anfrage/view.cpt
    -app/view/Anfrage/edit.cpt
    -app/view/Auftrag/view.cpt
    -app/view/Auftrag/edit.cpt

jeweils ein
pr($test);
einbauen um (bei 0) alle damit verbundenen Datenblöcke des Kunden zu bekommen?

und wenn ich nur ein Element aus dem Array will dann mache ich
echo $test['Kunde']['Nachname'] . $test['Kunde']['Vorname']
?


Oder mache ich da einen Denkfehler und brauche unbedingt eine eigene View für die Funkton test() damit ich cake-konform bleibe?

Danke und Gruß

Michael
mivogtLU
 
Beiträge: 46
Registriert: Di 12. Jan 2010, 21:22
Wohnort: 67059
CakePHP-Version: 1.3 final
OS: Linux, Win XP-Vista

Re: Frage: verknüpfte Models in 1 View anzeigen?

Beitragvon mbrod » Mi 20. Jan 2010, 13:51

brauche unbedingt eine eigene View für die Funkton test() damit ich cake-konform bleibe?

Siehe dazu:http://book.cakephp.org/view/428/render

In den gebackenen view.ctp und edit.ctp kannst Du mal pr($this->data) einfügen. Da sollten die benötigten Daten drin sein.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Frage: verknüpfte Models in 1 View anzeigen?

Beitragvon mivogtLU » Mi 20. Jan 2010, 15:01

ja das klappt alles prima.
Ganz einfach wenn man's erstmal hat.

War mir nur nicht sicher ob's sauber ist die views zu customizen - aber da es ja inhaltlich gewollt ist und der Aktion in der View zugehört denke ich dass das passt.

Nun machts wieder spaß mit cake und ich kann weiter basteln - danke!
Werde mich noch öfter hier schlaufragen da ich aktuell mein erstes Projekt mit Cake baue und mir einiges vorgenommen habe. Man wächst ja an den Herausforderungen...
mivogtLU
 
Beiträge: 46
Registriert: Di 12. Jan 2010, 21:22
Wohnort: 67059
CakePHP-Version: 1.3 final
OS: Linux, Win XP-Vista


Zurück zu Views

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast