Empfehlungen: Erweiterte Suche

Mehrere Models in Controller an View übergeben

Daten auslesen, verarbeiten und den Views übergeben

Mehrere Models in Controller an View übergeben

Beitragvon derdome » Mi 15. Sep 2010, 17:09

Leider habe ich mit der Suche nichts passendes gefunden. Falls trotzdem ein Post dazu existiert bitte den link posten.

Nun zu meinem Problem:

Ich habe eine Tabelle mit 2 Fremdschlüssel auf weitereTabellen. Diese eine Tabelle möchte ich befüllen. Hierzu lasse ich mir auf zwei verschiedenen Views Fremdschlüssel zuvor vom Benutzer auswählen die Daten für den Fremdschlüssel (Einträge existieren schon) auswählen. Jetzt bin ich in der 3. (und letzten) View angelangt in der ich die bereits ausgewählten Daten anzeigen lassen möchte (Details) und des Weiteren die restlichen Felder eingeben möchte. Hierzu benötige ich jedoch den Zugriff auf 3 Models (2 Views um die ausgewählten Daten anzuzeigen worauf die FKs verweisen und eine um die eigentlichen Tabellenfelder ausfüllen zu lassen).

Im Controller kann ich ja das $data array wie folgt setzen.
Code: Alles auswählen
$this->data=$this->Customer->read(NULL, $cid);


wenn ich jetzt jedoch noch das der zuvor ausgewählt "shop" anzeigen möchte würde ich durch die nächste Zuweisung das Datamodell. Ich benötige jedoch mehere Modells um mir bestimmte Felder zur anzeige oder zum verändern voranzeigen zu lassen.

Also meine Frage wie kann ich mehrere Models dem $data-array zuweisen für das automatische Mapping in der View.
derdome
 
Beiträge: 8
Registriert: Mi 15. Sep 2010, 16:38

Re: Mehrere Models in Controller an View übergeben

Beitragvon mbrod » Mi 15. Sep 2010, 18:40

Mir erscheint deine Vorgehensweise mit 3 Views umständlich. Soweit ich dein Problem verstehe ließe sich das doch alles in einem View erledigen, so wie es mit cake bake automatisch erstellt wird. Siehe dazu:
http://www.cakephp-forum.com/konzeption-und-vorgehensweise/wie-fangt-man-am-besten-an-t483.html
Weitere Posts könnten hilfreich sein:
http://www.cakephp-forum.com/konzeption-und-vorgehensweise/2-referenzen-auf-eine-tabelle-t589.html
und
http://www.cakephp-forum.com/konzeption-und-vorgehensweise/belongsto-wie-zugriff-auf-die-daten-t612.html
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: Mehrere Models in Controller an View übergeben

Beitragvon derdome » Mi 15. Sep 2010, 19:43

Ich will es nicht in einer View mache, da ich ein Feld je nach wahl einer FK-Referenz als standard setzen möchte bei der eingabe.

Wenn ich dies irgendwie in einer View machen wollte müsste ich da mit javascript arbeiten. das ist mir zu umständlich und unübersichtlich für meine Anwendung.

Am flexibelsten wäre ich, wenn ich mehrere Modells an meine View übergeben könnte, wie beschrieben. So können die Anzeigefelder von der jeweiligen Tabelle befüllt werden. Ich versuche es nachfolgend nochmal klar zu machen was ich machen möchte.

Beispiel: Tabelle customers (bereits einträge angelegt), Tabelle shops (bereits einträge angelegt), Tabelle buys (hier soll Eintrag angelegt werden ) Buys hat FK customer_id und shop_id

1. Schritt: Alle Customers werden in einer tabelle aufgeführt. durch klicken auf einen gelange ich zur auswahl des shops wo der einkauf stattgefunden hat. Nachdem dieser ausgewählt wurde gelangt man zur eigentlichen view zur anlage des "buy".

Hier will ich nun ein paar Daten der bereits ausgewählten customers und shops anzeigen lassen. Außerdem (Wichtig) sollen auch ein paar felder des "buys", das ausgefüllt werden soll schon mit Werten aus den anderen tabellen standard vorbelegt werden. Diese können dann aber noch verändert werden. Das einfachste wäre meiner Meinung nach wenn es möglich wäre alle models in view dem $this->data zuzuordnen, worauf man die geladenen werte automatisch zuweisen könnte.

Ich hoffe jmd macht sich die mühe und kann mein problem nachvollziehen.
derdome
 
Beiträge: 8
Registriert: Mi 15. Sep 2010, 16:38

Re: Mehrere Models in Controller an View übergeben

Beitragvon mbrod » Mi 15. Sep 2010, 20:16

Das bedeutet also für das buy Model: belongsTo customer und belongsTo shop
Im buy Controller kann man dann die Daten der zugehörigen Models über
Code: Alles auswählen
$customers = $this->Buy->Customer->find(...);
$shops = $this->Buy->Shop->find(...);
$this->set('customers',$customers);
$this->set('shops',$shops);
abfragen und im View über die Variablen $customers und $shops zugreifen.
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: Mehrere Models in Controller an View übergeben

Beitragvon derdome » Do 16. Sep 2010, 10:33

Soweit ist das ja kein Problem. Die Beziehungen zwischen den Tabellen hatte ich schon gepflegt. Ich habe zwar nicht über Buy auf die 2anderen modells zugegriffen, sondern direkt im controller indem ich über uses den zugriff auf die anderen Modells ermöglicht habe. Das stellt nicht das Problem dar.

Jetzt zum unterschied zwischen $this->set() und $this->data.

Wenn ich die Variabeln über set setze erlaubt mir dies nicht das automatische Mapping, das mir von cakephp abgenommen wird. Das heißt ich muss die felder selber zuweisen.

Wenn ich aber über $this->data mehrere Models zuweisen kann wird mir das mapping abgenommen. Ich muss also lediglich
Code: Alles auswählen
echo $form->input('Customer.id');
in der View eintragen und mir werden die Daten die bereits existieren und die ich über $this->data zugewiesen habe automatisch befüllt. Dies ist doch der unterschied zwischen $this->set bei dem ich lediglich zugriff auf die Definierte variable hab und $this->data. So habe ich das bisher aus der DOku verstanden. Bitte korrigiert mich falls ich falsch liege.

Also möchte ich $this->data die Daten von Shop und Customer die ausgewählt wurden anzeigen lassen und des weiteren noch die restlichen Felder von buy die auszufüllen sind anzeigen.

Noch eine Anmerkung: ich habe gerade versucht meinen Code umzustellen und von Buy auszugehen bei dem find, so wie du es beschrieben hast.
Code: Alles auswählen
$this->Booking->Customer->find(...)
das scheint nicht zu gehen, ich bekomme die Fehlermeldung " Undefined property: BuysController::$Buy...
Trying to get property of non-object [APP/controllers...
Fatal error: Call to a member function find() on a non-object in /var/..." Scheint auch logisch zu sein, da ich ja erst einen Eintrag anlegen möchte, dieser ja noch nicht existiert. mache ich es so wie zuvor und holde mir die Daten direkt über das jeweilige Model. Das ist auch nicht das Problem. Das funktioniert soweit.
derdome
 
Beiträge: 8
Registriert: Mi 15. Sep 2010, 16:38


Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron