IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[Doctrine] model classes


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut [Doctrine] model classes
    Bonsoir

    Imaginons une table USER.

    On va ensuite générer les classes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Doctrine::generateModelsFromDb('models', array('doctrine'), array('generateTableClasses' => true));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class User extends BaseUser
    {
     
    }
    Ensuite on a généré un squelette doctrine_Table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class UserTable extends Doctrine_Table
    {
     
    }
    Dans la documentation on nous dit cela.

    You can place custom functions inside the User and UserTable classes to customize the functionality of your models. Below are some examples:
    Je ne comprends pas très bien la différence entre ces deux classes,quel est le rôle de chacune d'entre elle et que doivent t'elles contenir?

    Merci

  2. #2
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Bonjour,

    La classe User te sert à travailler sur un objet.
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->getNom() pour récupérer le nom de l'utilisateur en base de données
    ou encore la méthode magique __toString()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __toString()
    {
      return strtoupper($this->getNom()). " " .$this->getPrenom();
    }
    La classe UserTable te sert à travailler sur une collection d'objets. C'est ici que tu écris tes requêtes particulières (autrement dit, non magique avec Doctrine ou Propel).

    Tu auras plus d'infos par ici http://www.symfony-project.org/book/...ding_the_model

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Merci mais du coup je ne comprends pas pourquoi dans le tuto sur jobeet on a donc ceci dans la class JobettJobTable et non pas JobeetJob.
    J'ai vraiment du mal à faire la distinction.

    EDIT: car addActiveJobsQuery renvoie une collection de jobs peux être?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    class JobeetJobTable extends Doctrine_Table
    {
    	public function retrieveActiveJob(Doctrine_Query $q)
      {
        return $this->addActiveJobsQuery($q)->fetchOne();
      }
     
      public function getActiveJobs(Doctrine_Query $q = null)
      {
        return $this->addActiveJobsQuery($q)->execute();
      }
     
      public function countActiveJobs(Doctrine_Query $q = null)
      {
        return $this->addActiveJobsQuery($q)->count();
      }
     
      public function addActiveJobsQuery(Doctrine_Query $q = null)
      {
        if (is_null($q))
        {
          $q = Doctrine_Query::create()
            ->from('JobeetJob j');
        }
     
        $alias = $q->getRootAlias();
     
        $q->andWhere($alias . '.expires_at > ?', date('Y-m-d H:i:s', time()))
          ->addOrderBy($alias . '.created_at DESC');
     
        return $q;
      }
     
     
    }

  4. #4
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Citation Envoyé par masseur Voir le message
    EDIT: car addActiveJobsQuery renvoie une collection de jobs peux être?
    En gros, oui

  5. #5
    Membre éprouvé

    Homme Profil pro
    Software Engineer
    Inscrit en
    Août 2004
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 173
    Par défaut
    Citation Envoyé par masseur Voir le message
    Merci mais du coup je ne comprends pas pourquoi dans le tuto sur jobeet on a donc ceci dans la class JobettJobTable et non pas JobeetJob.
    J'ai vraiment du mal à faire la distinction.

    EDIT: car addActiveJobsQuery renvoie une collection de jobs peux être?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    class JobeetJobTable extends Doctrine_Table
    {
    	public function retrieveActiveJob(Doctrine_Query $q)
      {
        return $this->addActiveJobsQuery($q)->fetchOne();
      }
     
      public function getActiveJobs(Doctrine_Query $q = null)
      {
        return $this->addActiveJobsQuery($q)->execute();
      }
     
      public function countActiveJobs(Doctrine_Query $q = null)
      {
        return $this->addActiveJobsQuery($q)->count();
      }
     
      public function addActiveJobsQuery(Doctrine_Query $q = null)
      {
        if (is_null($q))
        {
          $q = Doctrine_Query::create()
            ->from('JobeetJob j');
        }
     
        $alias = $q->getRootAlias();
     
        $q->andWhere($alias . '.expires_at > ?', date('Y-m-d H:i:s', time()))
          ->addOrderBy($alias . '.created_at DESC');
     
        return $q;
      }
     
     
    }
    Pour faire simple :
    Les classes [NomDuModele].class.php sont la représentation d'un enregistrement de ta table (qui donnent lieu à un objet).
    Les classes [NomDuModele]Table.class.php représentent la table dans ta base de données, donc quand tu veux récupérer plusieurs enregistrements et donc plusieurs(ou un seul) objets instanciés de [NomDuModele].class.php, tu écris tes requêtes DQL dans ces classes.

Discussions similaires

  1. class model comme doctrine 1
    Par pingolitipus dans le forum Doctrine2
    Réponses: 10
    Dernier message: 27/10/2011, 11h35
  2. transformation modele classe uml au oracle
    Par ra'uf dans le forum SQL
    Réponses: 3
    Dernier message: 19/05/2009, 16h25
  3. [Zend_Db] MVC: Une classe métier dans "Model"
    Par salmoucha dans le forum Zend_Db
    Réponses: 7
    Dernier message: 04/04/2008, 09h57
  4. models = classes metiers ?
    Par is_null dans le forum Langage
    Réponses: 2
    Dernier message: 21/08/2007, 13h20
  5. modele de classe en CSS
    Par guigui_rondat dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 01/02/2006, 17h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo