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

Symfony PHP Discussion :

[crud] Ajouter des méthodes [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Par défaut [crud] Ajouter des méthodes
    bonjour,
    j'ai généré un crud grâce à symfony et j'aimerai pouvoir faire des requêtes sur d'autres tables que celles proposées par le crud.
    De plus, j'aimerai créer des méthodes.
    comment cela se passe-t-il ?
    j'avais créer des méthodes dans ma classe.php mais le problème c'est qu'il y a beaucoup trop de requêtes sql générées et le mieux serait de rapatrier toute une table et faire des sélections dessus.
    mais je n'arrive pas à comprendre comment le code est partagé et où exactement
    merci d'avance

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Bonsoir,
    qu'est-ce que tu ne comprends pas exactement ?
    Rapatrier toute une table ne serait pas trop lourd ? Tu peux faire ça par un doSelect() depuis un fichier d'action, réaliser les opérations dans ce fichier action et les transmettre au template correspondant. En fait, un CRUD généré est exactement comme une application normale: on utilise les actions et les templates, et non un fichier de configuration, comme lorsqu'on l'initialise.
    Les méthodes peuvent se mettre dans les modèles (dans le dossier lib/model) lorsqu'elles se rattachent au modèle, soit dans un des dossiers lib si elles font autre chose.

  3. #3
    Membre confirmé Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Par défaut
    Bonjour,
    j'avoue je suis un petit peu perdue et j'aimerai bien comprendre comment faire mon application.
    j'ai une liste de produits qui ont des liens avec deux tables ("supprimé" et "modifié")
    certaines colonnes doivent être déterminées par mon programme.
    En effet, il s'agit de l'état de mon produit qui peut être modifié par d'autres produits (à afficher), supprimé et non surveillé.
    j'avais ajouté des méthodes dans le lib/model pour déterminer l'état mais j'ai 126 requêtes exécutées pour 11 produits récupérés.
    j'ai donc voulu optimiser mon programme en utilisant les méthodes déjà existantes du modèle. Le problème est qu'elles ne répondent pas toutes à mes besoins.
    je me demandais donc éventuellement si je devais rapatrier toutes les tables liées aux produits dans un tableau, faire des sélections sur celui ci et où coder tout ça sans qu'il y ai tant de requêtes exécutées.
    De plus dans le fichier actions.class.php, il y a la variable $this->produits et j'aimerai savoir où elle est déclarée.
    j'espère avoir été un peu plus claire que la veille

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Bonjour,
    Effectivement, 126 requêtes c'est beaucoup. C'est l'un des inconvénients d'utiliser un ORM à la place de requêtes directes. Quoique je me demande s'il n'est pas possible d'utiliser une syntaxe plus succinte pour tes requêtes (ou repenser les relations entre les tables et éviter les jointures que je suppose sont nombreuses).
    Après, ça dépend du nombre de tables liées que tu veux rapatrier, et de la taille de ces tables, car à moins que tu n'écrives directement tes requêtes SQL, tu auras un certain nombre d'objets plus ou moins lourds en mémoire. Bon, si tu es relativement libre en mémoire, ça ne devrait pas poser de problème.
    Le meilleur endroit pour faire ça serait dans les models, en étendant les classes de base (les classes simples et les peers, suivant la nature des opérations). Le nombre de requête ne dépend pas de l'endroit où tu codes, mais de la syntaxe de la requête, de l'organisation de tes tables. Et quelques fois, malgré toutes les optimisations, on ne peut pas faire autrement que d'avoir des requêtes en grand nombre.

    Quant à $this->produit, elle est déclarée là où elle est utilisée. Sa valeur n'est -elle pas fournie par une méthode d'une classe model (Produit, ProduitPeer ou une classe liée) ? du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->produit = ProduitPeer::retrieveByPk('id');
    ou similaire.

  5. #5
    Membre confirmé Avatar de Mitaka
    Profil pro
    formaTRICE en informatique
    Inscrit en
    Avril 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : formaTRICE en informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 192
    Par défaut
    merci pour ta réponse mais je n'arrive pas trop à voir comment faire tout ça.
    en plus je pense m'être trompée en mettant des méthodes qui interrogent la base dans produit.php et non dans produitPeer.php.
    mais si je fais l'inverse, je ne vois pas comment utiliser cette classe dans listSuccess.php.
    j'ai quand même réussi à diminuer le nombre de requêtes à 55.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Tu n'as pas à utiliser une classe Peer dans listSuccess.php, même si c'est faisable, ce serait conterdire les principes du MVC. Normalement, tu dois stocker les résultats de la méthode de la classe Peer dans une variable ($this->quelquechose) dans ton action. En préfixant la variable par $this, tu la mets à la disposition de listSuccess, qui peut ensuite l'utiliser par $quelquechose (sans le this).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Est-il possible d'ajouter des méthodes à UriBuilder?
    Par Immobilis dans le forum ASP.NET
    Réponses: 4
    Dernier message: 08/11/2009, 12h57
  2. Ajouter des méthodes à ActiveRecord::Base
    Par tupapau dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 02/07/2009, 12h37
  3. Ajouter des méthodes, des classes
    Par Toba63 dans le forum iReport
    Réponses: 3
    Dernier message: 20/08/2008, 10h29
  4. comment ajouter des méthodes à une classe lors Runtime?
    Par revever dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/03/2008, 13h53
  5. [POO] Comment ajouter des méthodes à un objet DIV ?
    Par Murasame dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/10/2007, 23h01

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