2016-04-06 9 views
1

Ich versuche SQL-Abfrage mit Tabelle Gateway ausführen, die COUNT (*) Ausdruck in ZF2 enthalten. Das ist Funktion in meinem Modell:SELECT (COUNT (*)) Abfrage in ZF2

public function brKomentariUred(){ 
     $sql = $this->tableGateway->getSql(); 
     $select = $sql->select(); 
     $select->columns(array('brKomentari' => new \Zend\Db\Sql\Expression('count(komentarID)'), 'uredId' => 'ured')); 
     $select->group('ured'); 
     //echo $sql->getSqlStringForSqlObject($select); die(); 
     return $this->tableGateway->selectWith($select);  
    } 

Wenn die Abfrage gedruckt wird es richtig ist,

SELECT count(komentarID) AS `brKomentari`, `komentar`.`ured` AS `uredId` FROM `komentar` GROUP BY `ured` 

In der Steuerung Ich versuche

die Abfrage mit diesem Code aufzurufen
foreach($this->getKomentarTable()->brKomentariUred() as $r){ 
       $arr = $this->object_to_array($r); 
       print_r($arr); 
      } 

Es gibt keine Anzahl von Elementen und devicesID zurück, wie es in SELECT geschrieben wird, sondern gibt SELECT * FROM komentar zurück, aber ohne Werte. Ist das der richtige Code oder mache ich einen Fehler in meinem Code? Andere Abfragen sind in Ordnung.

Vielen Dank im Voraus für Ihre Hilfe.

+0

"devicesID wie es in SELECT geschrieben" - es gibt keine 'devicesID' Spalte in Ihrer Abfrage – RomanPerekhrest

+0

Ich meine 'ured'. 'ured' ist Spalte in meiner Tabelle. Das Ergebnis, das ich erhalte, ist dieser Array ( [komentarID] => [Datum] => [sodrzina] => [ured] => [Korisnik] => [Eingangsfilter] => ) Array ( [komentarID] => [Datum] => [sodrzina] => [ured] => [Korisnik] => [Eingangsfilter] => ) Alle Elemente in der Arrays, außer InputFilter, sind Spalten in meiner Tabelle in der Datenbank – Vasil

Antwort

1

An deiner Stelle würde ich die folgenden Schritte ausführen:

  • ersetzen den Ausdruck Objekt mit new \Zend\Db\Sql\Expression('COUNT(komentarID)')
  • würde ich nicht einen Alias ​​in group by Operator verwenden, kann es nicht funktionieren. Also, diese ersetzen $select->group('ured') mit $select->group('komentar.ured')

Auch sollte die Ergebnisverarbeitung vereinfacht werden:

$resultSet = $this->getKomentarTable()->brKomentariUred(); 
print_r($resultSet->toArray()); 
+0

Danke für Ihre Zeit und Mühe, mir zu helfen, Ich schätze es. Ich habe die Änderungen vorgenommen, aber leider ist es dasselbe Ergebnis. Ich erwarte nur zwei Spalten im Ergebnis. Den ganzen Tag bleibe ich dran: @ – Vasil

+1

Ich habe die Lösung gefunden! In meinem Modell habe ich $ resultSet geändert, das von der Funktion zurückgegeben wird. Ich habe geändert zurück $ this-> tableGateway-> selectWith ($ select); in $ resultSet = $ sql-> prepareStatementForSqlObject ($ select); Rückgabe $ resultSet-> execute(); Und es funktioniert! DANKE nochmal für deine Zeit und deine Bemühungen mir zu helfen. – Vasil