Empfehlungen: Erweiterte Suche

find Abfrage in Controller und Zugriff auf Ergebnis

Daten auslesen, verarbeiten und den Views übergeben

find Abfrage in Controller und Zugriff auf Ergebnis

Beitragvon Kekskruemel » So 31. Jul 2011, 18:52

Hallo Leute,

ich habe ein Modell
petrol_price_master
und dazu ein Controller
petrol_price_masters_controller

in diesem habe ich eine Funktion definiert.
Einen Teil möchte ich nun Vorstellen, weil sich darin ein Fehler verbirgt. Ich hatte mir das Skript programmieren lassen und wollte es nun erweitern. Leider sind meine CakePHP Kenntnisse erst am Wachsen. ;-)

Code: Alles auswählen

class PetrolPriceMastersController extends AppController {

    var $helpers = array('Html', 'Form','Demo','Number');
    var $name = 'PetrolPriceMasters';
    var $uses = array('User', 'PetrolPriceMaster','PetrolStationMaster','PetrolTypeMaster','PetrolStationMasterToPetrolTypeMaster');
   
    function add($id=null) {
                                        $this->set('PetrolPriceMasters2', $this->PetrolPriceMaster->find(
                                'all',
                                array(
                                 'conditions' => array(
                                  'PetrolPriceMaster.petrol_type_master_id' => ".$this->data['PetrolPriceMaster'][$c]['petrol_type_master_id']."
                                  ),
                                  'recursive' => 1,
                                  'fields' => array(
                                   'AVG(PetrolPriceMaster.price) as average'
                                   )
                                   )));
                               
                    $wert_obergrenze = $this->PetrolPriceMasters2['PetrolPriceMaster']['average']*1.1;   //Zeile 213
                    $wert_untergrenze = $this->PetrolPriceMasters2['PetrolPriceMaster']['average']*0.9;  //Zeole 214
                                               
                    if ($this->data['PetrolPriceMaster'][$c]['price'] < $wert_obergrenze &amp;&amp;  $this->data['PetrolPriceMaster'][$c]['price'] > $wert_untergrenze)
                    {  
                                 
                                    // Rausgelassen, weil dies vor der Erweiterung funktioniert hatte und fehlerfrei sein sollte (SAVE-Aufruf)
           
                                        }
                                        else
                                        {
       
                                    // Rausgelassen, weil dies vor der Erweiterung funktioniert hatte und fehlerfrei sein sollte (SAVE-Aufruf 2)
           
                        }
      }

 



$this->data['PetrolPriceMaster'][$c]['petrol_type_master_id'] kommt dabei aus einem Formular. Auch vom alten Skript und an sich fehlerfrei.
Ich habe die AVG Abfrage hinzugefügt und wollte nun noch prüfen ob sich die Werte in einem gewissen Umfang rund um den Original Wert befinden und entsprechend unterschiedlich abspeichern.

Ich erhalte die Fehlermeldung:
Notice (8): Undefined property: PetrolPriceMastersController::$PetrolPriceMasters2 [APP/controllers/petrol_price_masters_controller.php, line 213]
Notice (8): Undefined property: PetrolPriceMastersController::$PetrolPriceMasters2 [APP/controllers/petrol_price_masters_controller.php, line 214]
Warning (2): Cannot modify header information - headers already sent by (output started at /srv/www/vhosts/tankcheck.de/httpdocs/cake/libs/debugger.php:673) [CORE/cake/libs/controller/controller.php, line 746]
Kekskruemel
 
Beiträge: 15
Registriert: Di 16. Nov 2010, 10:45

Re: find Abfrage in Controller und Zugriff auf Ergebnis

Beitragvon euromark » So 31. Jul 2011, 19:51

da sind n paar richtig hässliche dinge im code :)

a) normal brauchst du in uses nur 1 model definieren, alle anderen sollte bei halbwegs gutem DB design davon gechained erreichbar sein

b) $this->set('PetrolPriceMasters2') übergibt an den view. es ist extrem unschön da nochmal vom controller aus zugreifen zu wollen
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: find Abfrage in Controller und Zugriff auf Ergebnis

Beitragvon Kekskruemel » So 31. Jul 2011, 20:34

Wie kann ich dann einen Durchschnitt abfragen, den ich nur im Controller für eine Entscheidung oder vlt. Auch mal eine Berechnung benötige?
Kekskruemel
 
Beiträge: 15
Registriert: Di 16. Nov 2010, 10:45

Re: find Abfrage in Controller und Zugriff auf Ergebnis

Beitragvon Mathias » So 31. Jul 2011, 21:35

Schau dir mal die query-Methode von cake an. Da kannst du eigene Abfragen schreiben:
http://book.cakephp.org/view/1027/query

Oder du versuchst mal den Weg über bindModel
http://api.cakephp.org/class/model#meth ... lbindModel
http://www.bunchacode.com/programming/c ... ame-model/
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: find Abfrage in Controller und Zugriff auf Ergebnis

Beitragvon Kekskruemel » So 31. Jul 2011, 21:43

Mittels query hatte ich es zu Beginn einmal.
Da kam aber dieselbe Fehlermeldung.

Für mich ist mehr die Frage ob ich denn irgendwie im Controller selber auf Ergebnisse einer Abfrage zugreifen kann.
Mittels
$this->PetrolPriceMasters2['PetrolPriceMaster']['average']
Scheint es ja nicht zu gehen.
Kekskruemel
 
Beiträge: 15
Registriert: Di 16. Nov 2010, 10:45

Re: find Abfrage in Controller und Zugriff auf Ergebnis

Beitragvon Mathias » So 31. Jul 2011, 21:53

Naja doch, über bindModel.
Vielleicht hilft dir das weiter: http://cake-php.blogspot.com/2008/07/gr ... model.html

Über bindModel erhälst du dann ein array, mit dem du weiter arbeiten kannst. Du kannst die Verbindung einmalig lassen oder permanent, je nachdem wie du es brauchst.
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: find Abfrage in Controller und Zugriff auf Ergebnis

Beitragvon Kekskruemel » So 31. Jul 2011, 22:10

Mmmh. Ich verstehe das nicht. Ich dachte die bind und unbind Funktion ist dazu da in einem Model1 ein anderes Modell hinzuzufügen um darauf zugreifen zu können, wenn ich es nicht schon dauerhaft eingebunden habe.

Aber ich Frage doch nun etwas nur aus einer Datenbank ab die auch das Modell und der Controller ist. ich binde also nun im Controller des Modells PetrolPriceMaster Modells noch einmal direkt zur Abfrage das Modell erneut ein und setze dahinter dann die Abfrage?
Und meine Zugriff in Zeile 213 und 214 wo dann der Fehler sein soll, ist korrekt?
Kekskruemel
 
Beiträge: 15
Registriert: Di 16. Nov 2010, 10:45

Re: find Abfrage in Controller und Zugriff auf Ergebnis

Beitragvon euromark » So 31. Jul 2011, 22:41

ich dachte ich hatte mich in b) klar genug ausgedrückt..

$result = $this->PetrolPriceMaster->find()
//JETZT kannst du im controller drauf zugreifen (ohne $this und CO)
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: find Abfrage in Controller und Zugriff auf Ergebnis

Beitragvon Kekskruemel » Mo 1. Aug 2011, 15:29

Soweit war das schon einmal sehr gut.
Nun bringt der den Fehler:
Fatal error: Unsupported operand types in ....


Als Zeilen nennt er 208 und 209:
Code: Alles auswählen
           $wert_obergrenze = $average*1.1;   //Zeile 208
                    $wert_untergrenze = $average*0.9;  //Zeole 209

Wobei $average nun so belegt wurde wie von dir gesagt.
Kekskruemel
 
Beiträge: 15
Registriert: Di 16. Nov 2010, 10:45

Re: find Abfrage in Controller und Zugriff auf Ergebnis

Beitragvon euromark » Mo 1. Aug 2011, 16:59

ich finde dass der fehler bereits alles aussagt
wie wurde $average denn belegt? es gibt pr() um anzuzeigen, was aktuell der inhalt einer variable ist
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows


Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron