Empfehlungen: Erweiterte Suche

belongsTo - wie Zugriff auf die Daten?

Fragen zur Konzeptionierung und womit man am besten anfäng? Hier rein...

belongsTo - wie Zugriff auf die Daten?

Beitragvon khan » Sa 10. Jul 2010, 19:13

Hallo zusammen,
ich bin leider noch im blutigen Anfängerstadium, habe das Blog-Tutorial nachvollzogen und bin nun dabei, selbst ein Beispielprojekt zu basteln. Dabei komme ich an Verständnisgrenzen, aber es kann auch sein, dass man dazu bereits mehr Erfahrung in OOP-Modellierung benötigt, die ich noch nicht wirklich ausgeprägt habe... :roll:
Ich möchte eine einfache Bildergalerie bauen. Es gibt dabei mehrere Galerien (Ordner), zu denen jeweils mehrere Bilder gehören. Im index-View von 'Gallery' gebe ich die Galerieliste aus mit link auf die einzelne Galerie (dort sollen dann die zugehörigen Bilder gelistet werden (erstmal einfach so) - ich habe das jetzt so gelöst, dass die Auflistung der Bilder im 'Image'-Index-View passiert und ich den Listenpunkten mit Links die angeklickte Galerie-ID übergebe. Das funktioniert auch bereits und auch die Bilder werden gelistet.
ABER: ich bekomme es nicht hin, vom Image-View aus auf den Namen der übergeordneten Galerie zuzugreifen! :|
Die Beziehungen hab ich den Models definiert, also in 'Image'
Code: Alles auswählen
var $belongsTo = array('Gallery');

und in 'Gallery'
Code: Alles auswählen
var $hasMany = array('Image');

Kann / Muss ich da noch mehr angeben, um zugreifen zu können?! Habe jetzt alle möglichen Ansätze hinter mir, aber nur Fehlermeldungen produziert.
Ich verstehe es so, dass ich im images_controller die entsprechende Variable mit dem Wert belegen muss und dem View diese damit zur Verfügung stelle und das Ganze müsste in der 'index'-Methode stattfinden?! Aber wie?

Oder wäre es schlauer, die Auflistung der Bilder unter 'Gallery' statt unter 'Image' stattfinden zu lassen? Wie gesagt, blicke da auch modellierungstechnisch noch nicht durch (und das bei so nem einfachen Beispiel...)

Danke für alle Tipps!!!
khan
 
Beiträge: 10
Registriert: Sa 10. Jul 2010, 18:52

Re: belongsTo - wie Zugriff auf die Daten?

Beitragvon mbrod » Sa 10. Jul 2010, 22:20

Wenn im ImagesController steht:
Code: Alles auswählen
    function index() {
        $this->Image->recursive = 0;
        $this->set('images', $this->paginate());
    }
 
solltest du im View index.ctp auf die Gallery zugreifen können:
Code: Alles auswählen
foreach($images as $image){
echo $image[Image][name].' '.$image[Gallery][name].'<br />';}

Um sich einen Überblick zu verschaffen, auf was ich im View alles zugreifen kann, kann man immer mal probehalber
Code: Alles auswählen
pr($images);
ausgeben lassen.
mbrod
 
Beiträge: 199
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: belongsTo - wie Zugriff auf die Daten?

Beitragvon khan » So 11. Jul 2010, 00:23

Hallo und danke für die Antwort,
aber genau das ist mein Problem - das habe ich oben so nicht so klar auf den Punkt gebracht - ab der foreach-Schleife wäre es klar, aber ich will den Namen der Galerie oben im Seitenkopf ausgeben und nicht für jeden Eintrag (Bild), also bevor die foreach($images as $image) mir die Werte aufdröselt...
Danke aber für den pagination-Tipp, so weit war ich noch gar nicht, das wäre dann wohl auch sinnvoll, das gleich mitzubedenken.
Puuh, vielleicht sollte ich mich gedulden, bis das Buch da ist (gestern bestellt), dann wird vielleicht manches klarer?!
Die Frage ist ja eigentlich nur:
Wie komm ich von der parent_id in images, die mir die Galerie-Id liefert, zum ensprechenden Namen der Galerie? Bewirkt die Zuweisung über $belongsTo nur ein internes 'Erkennen' für CakePHP oder kann man das irgendwie nutzen? Wie gesagt, ich haber leider nur Fehlermeldungen bekommen...
Möchte gern im Cake-Code bleiben, allgemein in SQL wär das klar... Oder kann / sollte ich da (einfach) ein eigenes SQL-Statement einbauen?! Aber wie?
Gruß!
khan
 
Beiträge: 10
Registriert: Sa 10. Jul 2010, 18:52

Re: belongsTo - wie Zugriff auf die Daten?

Beitragvon mbrod » So 11. Jul 2010, 07:34

Möchte gern im Cake-Code bleiben
ist auf jeden Fall der beste Weg.

Wie komm ich von der parent_id in images, die mir die Galerie-Id liefert
Möglichst bei den CakePHP Konventionen bleiben! Also gallery_id anstatt parent_id.

Bewirkt die Zuweisung über $belongsTo nur ein internes 'Erkennen' für CakePHP oder kann man das irgendwie nutzen?
Es nutzt automatisch, da Cake in den allermeisten Fällen die nötigen SQL-Abfragen ausführt.

Danke aber für den pagination-Tipp, so weit war ich noch gar nicht,
Das weist für mich daraufhin, dass Du den Controller nicht "gebacken" hast, denn da wird das automatisch so erstellt. Tipp daher: mit der Konsole arbeiten. Nachdem die Datenbank erstellt ist, erzeugt "cake bake" die nötigen models, controller, views. Ist gerade am Anfang zu lernen wie CakePHP "tickt" sehr hilfreich.

aber ich will den Namen der Galerie oben im Seitenkopf ausgeben
Dann wurde ja wohl zuvor im Controller eine bestimmte Gallery ID abgefragt. Und dann ist das besser im GalleriesController gelöst. Wenn Du cake bake verwendet hättest, würde dir .../galleries/view/1 wahrscheinlich ein Ergebnis liefern, welches ziemlich Deinen Erwartungen entsprechen würde.
mbrod
 
Beiträge: 199
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: belongsTo - wie Zugriff auf die Daten?

Beitragvon khan » So 11. Jul 2010, 14:02

mbrod hat geschrieben:
Wie komm ich von der parent_id in images, die mir die Galerie-Id liefert
Möglichst bei den CakePHP Konventionen bleiben! Also gallery_id anstatt parent_id.

Stimmt, heißt bei mir auch so, hab ich mich vertippt.

mbrod hat geschrieben:
Bewirkt die Zuweisung über $belongsTo nur ein internes 'Erkennen' für CakePHP oder kann man das irgendwie nutzen?
Es nutzt automatisch, da Cake in den allermeisten Fällen die nötigen SQL-Abfragen ausführt.

Aber 'benutzen' kann ich da dann trotzdem nichts individuell??

mbrod hat geschrieben:
Danke aber für den pagination-Tipp, so weit war ich noch gar nicht,
Das weist für mich daraufhin, dass Du den Controller nicht "gebacken" hast, denn da wird das automatisch so erstellt. Tipp daher: mit der Konsole arbeiten. Nachdem die Datenbank erstellt ist, erzeugt "cake bake" die nötigen models, controller, views. Ist gerade am Anfang zu lernen wie CakePHP "tickt" sehr hilfreich.

Ja, bisher nur per Hand versucht, aber ich will jetzt mal anfangen, mir Bake anzusehen.

mbrod hat geschrieben:
aber ich will den Namen der Galerie oben im Seitenkopf ausgeben
Dann wurde ja wohl zuvor im Controller eine bestimmte Gallery ID abgefragt. Und dann ist das besser im GalleriesController gelöst. Wenn Du cake bake verwendet hättest, würde dir .../galleries/view/1 wahrscheinlich ein Ergebnis liefern, welches ziemlich Deinen Erwartungen entsprechen würde.

Das meinte ich - es ist dann wohl doch schlauer, das in die Gallery-Funktionalität reinzupacken und über einen entsprechenden Gallery-View zu lösen?! Aber was mach ich dann in meiner Image-Klasse? Wie gesagt, ich hab an den Image-index-View geleitet (weil das Auflisten der Bilder dort stattfinden sollte), aber diesem dennoch die Gallery-ID übergeben, damit eben nur die Bilder der gewählten Galerie angezeigt werden - davon hab ich aber noch nicht den Namen.
Noch eine generelle Frage: kann man denn immer nur einen View 'laden', also nicht mehrere dieser ctp-Dateien auf einer Seite??? Oder kann man verschiedene Seitenbereiche definieren, wo dann verschiedene Views geladen werden? Nur mal als genereller Verständnis-Vorgriff, so weit bin ich noch lange nicht ;-)

OK, genug, werde mich erstmal mit Bake beschäftigen und das Buch abwarten und dann kommen sicher wieder neue Fragen.
Danke für die Tipps.
khan
 
Beiträge: 10
Registriert: Sa 10. Jul 2010, 18:52

Re: belongsTo - wie Zugriff auf die Daten?

Beitragvon khan » So 11. Jul 2010, 14:30

Nachtrag:
Habe es nun doch gerade hinbekommen!! :lol:
Meine index-Funktion im images_controller:
Code: Alles auswählen
function index($galID = null) {
        $this->Image->gallerys_id = $galID;
        $this->set('images', $this->Image->find('all', array(
            'conditions' => array('Image.gallery_id' => $galID, 'Image.status' => 1)
        )));
        $this->set('galleries', $this->Image->Gallery->find('all', array(
            'conditions' => array('Gallery.id' => $galID)
        )));
    }

Man kann also, wenn die Beziehung über belongsTo hergestellt ist, über
Code: Alles auswählen
$this->Image->Gallery

auf die assoziierte Galerie zugreifen.
Das wars letztlich, was ich wissen wollte ;-)
Letztlich wäre es schlauer, bei find nicht 'all' zu nehmen, weil ja nur ein Datensatz gesucht wird, aber die Ausgabe hab ich immerhin schonmal.
khan
 
Beiträge: 10
Registriert: Sa 10. Jul 2010, 18:52


Zurück zu Konzeption und Vorgehensweise

Wer ist online?

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