Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-11-2014 15:04:44

CedLP
Nouveau membre
Date d'inscription: 25-11-2014
Messages: 4

Requête sql

Bonjours à tous, bon je suis débutant en zend framework je vien de commencer y a à peine quelque semaine et je voudrai savoir comment fais t'on pour crée une requête sql du genre Select contenu where id=1 par exemepl et comment l'afficher dans une View index.phtml. Merci

Voici code dans le model il y a Auximad.php

Code:

Code:

<?php
namespace Auximad\Model;

class Auximad
{
    public $id_desc;
    public $type;
    public $titre;
    public $contenu;

    public function exchangeArray($data)
    {
        $this->id_desc = (isset($data['id_desc'])) ? $data['id_desc'] : null;
        $this-> type = (isset($data['type'])) ? $data['type'] : null;
        $this->titre  = (isset($data['titre'])) ? $data['titre'] : null;
        $this->contenu  = (isset($data['contenu'])) ? $data['contenu'] : null;
    }
    
    
    
}

ensuite voici le code de AuximadeTable


Code:

<?php

namespace Auximad\Model;
 use Zend\Db\TableGateway\TableGateway;
 class AuximadTable
 {
     protected $tableGateway;
     public function __construct(TableGateway $tableGateway)
     {
         $this->tableGateway = $tableGateway;
     }
     public function fetchAll()
     {
         $resultSet = $this->tableGateway->select();
         return $resultSet;
     }
     
     public function getAuximad($Id)
     {
         $Id  = (int) $Id;
         $rowset = $this->tableGateway->select(array('Id' => $Id));
         $row = $rowset->current();
         if (!$row) {
             throw new \Exception("Could not find row $Id");
         }
         return $row;
     }
     public function saveAuximad(Auximad $description)
     {
         $data = array(
             'Type' => $description->type,
             'Titre'  => $description->titre,
             'Contenu'  => $description->Contenu,
             
         );
         $Id = (int) $description->Id;
         if ($Id == 0) {
             $this->tableGateway->insert($data);
         } else {
             if ($this->getAuximad($Id)) {
                 $this->tableGateway->update($data, array('Id' => $Id));
             } else {
                 throw new \Exception('Description id does not exist');
             }
         }
     }
     public function deleteAuximad($Id)
     {
         $this->tableGateway->delete(array('Id' => (int) $Id));
     }
 }
?>

Merci d'avance

Hors ligne

 

#2 25-11-2014 15:35:55

romsVLM
Membre
Date d'inscription: 23-01-2014
Messages: 89

Re: Requête sql

bonjour,
Tu créer une nouvelle méthode dans ton fichier AuximadeTable.php (getPersonal() par exemple).
Dedans tu fais ta requête : http://framework.zend.com/manual/2.0/en … b.sql.html il y a la réponse pour la mis en forme de ta requête.

Ensuite tu récupère le résultat dans ton contrôleur, et tu l'envoi à ta vue.

Code:

[lang=php]
    $result = $this->getAuximadeTable()->getPersonal();
    return new ViewModel(array(
        'resultat' = $result;
    ));

Dernière modification par romsVLM (25-11-2014 15:36:24)

Hors ligne

 

#3 25-11-2014 16:09:23

CedLP
Nouveau membre
Date d'inscription: 25-11-2014
Messages: 4

Re: Requête sql

ok merci mais se que je sais vraiment pas c'est comment la syntaxe des requêtes avec zend

car avec ses deux model là quand j'affiche dans le index.phtml bah je fais

Code:

 foreach ($this->auximad as $rep) :
                                    
    echo nl2br($this->escapeHtml($rep->contenus));
                                    
endforeach

et direct sa affiche tous et pourtant c'est pas se que je veux

Hors ligne

 

#4 25-11-2014 16:27:23

romsVLM
Membre
Date d'inscription: 23-01-2014
Messages: 89

Re: Requête sql

Code:

[lang=php]
public function getPersonal($var) 
{
    $id  = (int) $var;
    $resultSet = $this->tableGateway->select(function($select) use($id) {
    $select->columns(array('pack_id','pack_name','pack_price', 'pack_img'))
                              ->where(array('pack_id'=>$id)
    });
            
    return $resultSet;
}

Dans le controleur, je récupère le résultat que j'envoi à la vue comme montré dans le post précédent.

Dans la vue j'affiche :

Code:

[lang=phtml]
<?php foreach($this->resultats as $res) : ?>
  pack_id : <?php echo $res->pack_id.'<br/>'; ?>;
  pack_name : <?php echo $res->pack_name.'<br/>'; ?>;
  pack_price : <?php echo $res->pack_price.'<br/>'; ?>;
  pack_img : <?php echo $res->pack_img.'<br/>'; ?>;
<?php endforeach; ?>

j'accède ainsi aux éléments que j'ai sélectionné dans mon select

Dernière modification par romsVLM (25-11-2014 16:28:00)

Hors ligne

 

#5 25-11-2014 16:29:54

CedLP
Nouveau membre
Date d'inscription: 25-11-2014
Messages: 4

Re: Requête sql

Merci beaucoup sa m'a aidé big_smile

Hors ligne

 

#6 26-11-2014 11:24:16

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Requête sql

Un petit passage rapide, pas trop le temps en ce moment. smile

Je ne vais pas répondre à la question, ça a déjà été fait. Cependant je suis un peu choqué par ce que j'ai lu. smile

Je passe rapidement sur le transtypage de $description->Id et sur le test ==0 (dans saveAuximad) auquel je préfère un empty (sauf besoin express), qui gère l'absence dans plusieurs états possibles (0, null, false, tableau/chaîne vide...). D'ailleurs tu transtypes pour à la finale ne faire qu'une évaluation avec l'opérateur "==" qui, par définition, va de toute façons transtyper ta valeur pour la comparer à l'entier 0.

Ensuite lancer une exception parce qu'on ne trouve pas un résultat au retour d'une requête à la bdd, je ne suis vraiment pas fan. Ce n'est pas une erreur, mais tout simplement qu'il n'y a pas de résultat.

Je ne sais pas si tu vas garder cette architecture Ced mais dans ta fonction saveAuximad tu fais un :

Code:

[lang=php]
if ($this->getAuximad($Id)) {
  $this->tableGateway->update($data, array('Id' => $Id));
} else {
  throw new \Exception('Description id does not exist');
}

Sauf que tu ne passeras jamais dans le else puisque tu auras déjà lancé une exception dans getAuximad.

Je ne le répéterai jamais assez, il est important d'apprendre à programmer avant de se lancer dans un framework.

Aujourd'hui tout le monde jure par les frameworks, si bien que beaucoup de jeunes développeurs se lancent tout de suite dedans sans même faire l'apprentissage des bases de la programmation notamment l'algorithmique.

Le framework (orm inclus), de par son architecture facilite et accélère les développements avec des processus sous-jacents. Ce qui est bien pratique mais ne rend pas service au nouveau venu car ces processus sont en effet plein d'enseignements particulièrement quand on les développe (ou cherche à les développer) soi-même.

Il ne faudrait pas brûler les étapes. Utiliser un framework est une chose aisée, maîtriser la programmation est bien plus ardu. D'ailleurs, lors d'un recrutement, si on vous fait passer des tests, on vous évaluera sur du PHP (le cas échéant) et non pas sur du framework. Un bon développeur PHP n'ayant jamais pratiqué de framework sera largement préféré à un "mauvais" qui utilise déjà un framework.


22914720

Hors ligne

 

#7 26-11-2014 20:58:40

romsVLM
Membre
Date d'inscription: 23-01-2014
Messages: 89

Re: Requête sql

tu t'es trompé de post non ?

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages