• Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

Felder einer Zeile addieren, wie den Query umsetzen?

walrus

New member
Hallo zusammen,

ich habe eine Tabelle in der die Verfügbarkeiten von Zimmern eines Monats eingetragen sind. Struktur der Table also:
Code:
-- ----------------------------
-- Table structure for `roomrates`
-- ----------------------------
CREATE TABLE `roomrates` (
  `date` date NOT NULL,
  `cat1_free` int(11) NOT NULL,
  `cat2_free` int(11) NOT NULL,
  `cat3_free` int(11) NOT NULL,
  `cat4_free` int(11) NOT NULL,
  `cat5_free` int(11) NOT NULL,
  `cat6_free` int(11) NOT NULL,
  `cat7_free` int(11) NOT NULL,
  `cat8_free` int(11) NOT NULL,
  PRIMARY KEY (`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Nun will ich alle Verfügbarkeiten, sagen wir mal für den Monat November 2013 auslesen und dabei aber gleich die Spalten cat1_free + cat2_free, sowie cat2_free + cat3_free + .... + cat8_free zusammenfassen. Query in MYSQL wäre also
Code:
select date, cat1_free + cat2_free as ez, cat2_free + cat3_free + cat4_free + cat5_free + cat6_free + cat7_free + cat8_free as dz from roomrates where date >= "2013-11-01" and date <= "2013-11-31";
Das funktioniert einwandfrei und spuckt aus das Gewünschte aus
Code:
+------------+----+----+
| date       | ez | dz |
+------------+----+----+
| 2013-11-01 |  6 | 21 |
| 2013-11-02 |  6 | 21 |
| 2013-11-03 |  6 | 21 |
| 2013-11-04 |  6 | 21 |
| 2013-11-05 |  6 | 21 |
| 2013-11-06 |  6 | 21 |
| 2013-11-07 |  6 | 21 |
| 2013-11-08 |  6 | 21 |
| 2013-11-09 |  6 | 21 |
| 2013-11-10 |  6 | 21 |
| 2013-11-11 |  6 | 21 |
| 2013-11-12 |  6 | 21 |
| 2013-11-13 |  6 | 21 |
...
Wie setze ich diesen Query aber nun in einer Tables Klasse fürs ZF 1.12 um? Mein Ansatz war:

PHP:
    class Roomrates extends Zend_Db_Table_Abstract {
        
        protected $_name     = 'roomrates';
        protected $_primary  = 'date';


        
        public function getFree ($year, $month) {
            
            $query  = 'select date, cat1_free + cat2_free as ez, cat2_free + cat3_free + cat4_free + cat5_free + cat6_free + cat7_free + cat8_free as dz ';
            $query .= 'from roomrates where date >= "' . $year . '-' . $month . '-01" and ';
            $query .= 'date <= "' . $year . '-' . $month . '-31"';
            $query  = $this->getAdapter()->query($query);
            //var_dump($query);
            $results = $this->getAdapter()->fetchall($query);
            return $results;
        }
    }
Der var_dump zeigt auch den korrekten Query an
Code:
object(Zend_Db_Statement_Pdo)#13 (9) {
  ["_fetchMode":protected]=>
  int(2)
  ["_stmt":protected]=>
  object(PDOStatement)#14 (1) {
    ["queryString"]=>
    string(196) "select date, cat1_free + cat2_free as ez, cat2_free + cat3_free + cat4_free + cat5_free + cat6_free + cat7_free + cat8_free as dz from roomrates where date >= "2013-11-01" and date <= "2013-11-31""
  }
ich bekommen aber ständig folgenden Fehler:
PHP Catchable fatal error: Object of class Zend_Db_Statement_Pdo could not be converted to string in /usr/local/lib/php/Zend-1.11.11/Db/Statement.php on line 204
wo liegt mein Denkfehler?
 
Zuletzt bearbeitet:

Kaiuwe

Super-Moderator
Willkommen im Forum! :)
Code:
object(Zend_Db_Statement_Pdo)

wo liegt mein Denkfehler?
Wie dir deine IDE und auch die Ausgabe von „var_dump“ schon verrät, bekommst du ein „Statement“ zurück und von diesem holst du die Ergebnisse. Deine Annahme, dass die Methode „query“ eine Abfrage erstellt, ist falsch, denn die Methode führt deine Abfrage bereits aus.

(Dieser Verhalten/Vorgang sollte aber bereits bekannt sein, denn dies ist keine Erfindung vom ZF, sondern ist schon in PHP [siehe in diesem Beispiel] selbst so vorhanden.)
 
Oben