2013-02-26 2 views
1

Voici mon modèle:résultats d'une requête Comparaison mysql dans ZF2

<?php 

namespace Object\Model; 

use Zend\Db\TableGateway\TableGateway; 
use Zend\Db\Sql\Sql; 

class SiteVisitsTable { 

protected $tableGateway; 
protected $sql; 

public function __construct(TableGateway $tableGateway) { 
    $this->tableGateway = $tableGateway; 
    $this->sql = new Sql($this->tableGateway->adapter); 
} 

public function getVisits($field = '', $value = '') { 
    if ($field = '' || $value = ''): 
     $rowset = $this->tableGateway->select(array($field => $value)); 
    else: 
     $rowset = $this->tableGateway->select(); 
    endif; 

    $row = $rowset->current(); 
    return $row; 
} 

public function getAllVisits() { 
    $adapter = $this->tableGateway->adapter; 

    $select = $this->sql->select(); 
    $select->from($this->tableGateway->getTable()); 
    $select->columns(array(
     new \Zend\Db\Sql\Expression('SUM(`unique`) as `unique`'), 
     new \Zend\Db\Sql\Expression('SUM(`impressions`) as `impressions`'), 
    )); 

    $selectString = $this->sql->getSqlStringForSqlObject($select); 
    $resultSet = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE); 

    return $resultSet; 
} 

public function addVisit($date) { 
    $currentVisits = $this->getVisits('date', $date); 
    if ($currentVisits) { 
     $data = array(
      'unique' => $currentVisits + 1, 
     ); 

     $this->tableGateway->update($data, array('date' => $date)); 
    } else { 
     $data = array(
      'unique' => 1, 
      'impressions' => 1, 
     ); 

     $this->tableGateway->insert($data); 
    } 
} 
} 

Dans les getAllVisits méthode publique que j'ai une requête SELECT CUM MySQL. Tout va bien avec la requête elle-même, mais je ne peux pas imprimer les valeurs de la requête. Voici la décharge de resultSet $:

Zend\Db\ResultSet\ResultSet Object 
(
[allowedReturnTypes:protected] => Array 
    (
     [0] => arrayobject 
     [1] => array 
    ) 

[arrayObjectPrototype:protected] => ArrayObject Object 
    (
     [storage:ArrayObject:private] => Array 
      (
      ) 

    ) 

[returnType:protected] => arrayobject 
[buffer:protected] => 
[count:protected] => 1 
[dataSource:protected] => Zend\Db\Adapter\Driver\Pdo\Result Object 
    (
     [statementMode:protected] => forward 
     [resource:protected] => PDOStatement Object 
      (
       [queryString] => SELECT SUM(`unique`) as `unique`, SUM(`impressions`) as `impressions` FROM `site_visits` 
      ) 

     [options:protected] => 
     [currentComplete:protected] => 
     [currentData:protected] => 
     [position:protected] => -1 
     [generatedValue:protected] => 0 
     [rowCount:protected] => 1 
    ) 

[fieldCount:protected] => 2 
[position:protected] => 
) 

Vous pouvez voir la touche queryString et quand j'exécute la requête « brut » dans phpmyadmin, il affiche les valeurs de la base de données MySQL, mais en essayant de les afficher dans ZF2 , ça ne semble pas fonctionner.

Voici mon contrôleur:

return new ViewModel(array(
       'todayVisits' => $this->getSiteVisitsTable()->getVisits('date', date('Y-m-d')), 
       'allVisits' => $this->getSiteVisitsTable()->getAllVisits(), 
       'yesterdayVisits' => $this->getSiteVisitsTable()->getVisits('date', ''), 
       'inactiveBlogs' => $this->getBlogsTable()->getInactiveBlogs(), 
       'inactiveUsers' => $this->getUsersTable()->getUsers('is_active', '0'), 
       'notes' => $this->getAdminNotesTable()->getAllNotes(), 
       'form' => $form, 
      )); 

Et moi:

<article class="stats_overview"> 
<div class="overview_today"> 
    <p class="overview_day">Днес</p> 
    <p class="overview_count"><?php echo $todayVisits->unique; ?></p> 
    <p class="overview_type">посещения</p> 
    <p class="overview_count"><?php echo $todayVisits->impressions; ?></p> 
    <p class="overview_type">импресии</p> 
</div> 
<div class="overview_previous"> 
    <p class="overview_day">Общо</p> 
    <p class="overview_count"><?php echo $allVisits->unique; ?></p> 
    <p class="overview_type">посещения</p> 
    <p class="overview_count"><?php echo $allVisits->impressions; ?></p> 
    <p class="overview_type">импресии</p> 
</div> 
</article> 

post-scriptum J'ai le même problème avec les requêtes JOIN! :) Merci d'avance.

+0

Quelles sont les erreurs pour obtenir l'accès aux valeurs interrogées? –

+0

Vous ne savez pas si vous rencontrez un problème en utilisant le mot réservé "unique" comme nom de colonne. – Andrew

+0

Je ne reçois rien. Ils n'existent tout simplement pas. Je n'ai aucune erreur. La requête est correcte, car j'utilise des apostrophes (oui, unique est un mot réservé). Lorsque j'exécute la requête de la queryString (voir la sauvegarde) dans phpmyadmin, j'obtiens le résultat voulu, mais en ZF2, je ne reçois rien. –

Répondre

0

vous pouvez voir mon modèle:

<?php 

namespace Home\Model; 

use Zend\Db\TableGateway\AbstractTableGateway; 
use Zend\Db\Adapter\Adapter; 
use Zend\Db\ResultSet\ResultSet; 
use Zend\Db\Sql\Select; 


class VisitTable extends AbstractTableGateway { 

    protected $table = 'counter'; 


    public function __construct(Adapter $adapter) { 
     $this->adapter = $adapter; 
     $this->resultSetPrototype = new ResultSet(); 
     $this->resultSetPrototype->setArrayObjectPrototype(new Visit()); 

     $this->initialize(); 
    } 



    public function sumVisit(Select $select = null) { 
     if (null === $select) 
      $select = new Select(); 
     $select->from($this->table)->columns(array(new \Zend\Db\Sql\Expression('SUM(`luongtruycap`) as `luongtruycap`'))); 
     $resultSet = $this->selectWith($select); 
     $row = $resultSet->current(); 
     return $row; 
    } 


} 

Et Contrôleur:

$visit = $this->getVisitTable()->sumVisit(); 
return new ViewModel(array(
       'allVisits' => $visit->luongtruycap, 

      )); 

Vue:

<p class="overview_count"><?php echo $this->allVisits; ?></p> 

Meilleures salutations,

Ngô Tôn

+0

Pourriez-vous poster des commentaires sur le fonctionnement du code? (que ce soit dans le code comme commentaires, ou à l'extérieur comme paragraphes) – bjb568

Questions connexes