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 :

Calcul dans une procédure stockée ou dans le Repository ?


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Par défaut Calcul dans une procédure stockée ou dans le Repository ?
    Salut à tous,

    Je réalise actuellement un site avec comme cœur de fonctionnement un champ de géolocalisation et un champ catégorie.

    J'ai déjà l'ensemble qui fonctionne très bien.
    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
     
        /**
         * @return Ad[]
         */
        public function findAllVisibleQuery(AdSearch $search): array
        {
            if ($search->getLat() && $search->getLng() && $search->getCategory()) {
                return $this->findVisibleQuery()
                    ->select('a')
                    ->addSelect('(6353 * 2 * ASIN(SQRT( POWER(SIN((a.lat - :lat) *  pi()/180 / 2), 2) +COS(a.lat * pi()/180) * COS(:lat * pi()/180) * POWER(SIN((a.lng - :lng) * pi()/180 / 2), 2) ))) AS HIDDEN distance')
                    ->andWhere('a.category = :category')
                    ->having('distance <= :distance')
                    ->setMaxResults(AdSearch::NUMBER_OF_ITEMS)
                    ->addOrderBy("distance", "ASC")
                    ->setParameter('lng', $search->getLng())
                    ->setParameter('lat', $search->getLat())
                    ->setParameter('distance', AdSearch::DISTANCE)
                    ->setParameter('category', $search->getCategory())
                    ->getQuery()
                    ->getResult();
            }
        }
    comme je viens de le dire, mon appli fonctionne très bien.

    Je voulais voir avec vous le pour et le contre concernant la bonne pratique pour utiliser ce genre de calcul.

    Faut-il laisser le code comme ci-dessus ou il faut le mettre en procédure stockée ? sachant que la géolocalisation va être le cœur du site.. donc pas mal de requête en perspective.

    C'est la première fois que j'utilise cela avec Symfony donc je me demande s'il existe une solution pour la création de la fonction de procédure stockée dans Symfony autre que de passer par phpmyadmin bien sur. Par exemple un php bin/console make.. ou autre etc

    Quelle est la bonne pratique sous sf5 ? ou bien, il y a t'il un schéma genre fichier dans sf pour écrire la fonction ou rien du tout c'est juste par phpmyadmin ?

    je vous remercie j'espère que je suis clair dans mon message.

  2. #2
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Bonjour,

    Je suis partisan de séparer les missions et de limiter à chaque couche à sa fonction. Selon moi, un SGBD est là pour stocker de la donnée et assurer la cohérence et l'intégrité des données (pas de doublons, pas de perte, pas d'enregistrements incomplets, gestion de l'atomicité, gestion des transactions, etc)

    Le modèle doit être géré ailleurs, car le modèle évolue et la base de données doit répondre à toutes les requêtes possibles et non pas stocker toutes les requêtes possibles.
    Pour moi ta requête doit se retrouver dans le repository. Dans le cas contraire, ta requête serait une procédure stockée et ton repository ferait appel à ta procédure stocké. Pas sûr que cela aide beaucoup.

    Pour répondre à ta question : non le maker de symfony ne contient rien pour créer des procédures stockées.

    Ensuite, vu que tu gères beaucoup de données spatiales, as-tu regardé cette extension doctrine qui contient les fonctions spatiales et qui permet de stocker des Points ? Je l'ai mise à jour récemment pour être compatible avec les dernières versions de PHP, de doctrine et de Symfony. J'ai fait une documentation complète en anglais.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  3. #3
    Membre éclairé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Par défaut
    Salut,

    J'ai jeté un œil a ton extension, je pense que c'est intéressant pour des projets "plus lourd" avec plusieurs méthodes et requêtes spatiales et également plus pointu, dans mon cas je n'ai qu'une seule requête !, j'ai lu quelques pages de la doc mais je suis perdu rapidement. Je n'ai pas un niveau suffisant je pense mais ton extension reste intéressante effectivement pour des projets plus élaborés. Dans mon cas avec une seule requête spatiale (présente plus haut dans mon repo) c'est suffisant je pense. Même si effectivement cette requête est très sollicitée car c'est le cœur du fonctionnement du site, oui..

    Concernant ton avis sur le stockage de la requête dans le repo ou en procédure stockée, le problème c'est que les développeurs sont très partagés sur le sujet ! Certains me disent en procédure stockée et d'autres comme toi dans le repo. Du coup j'ai du mal a choisir.

  4. #4
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    En fait, ta question n'attend pas de réponses techniques, mais une réponse politique ou stratégique. Dans ces cas là, je fais une liste d'avantage et d'inconvénient. Maintenant que tu as beaucoup d'avis et d'arguments, à toi de pondérer chaque argument, de peser le pour et le contre pour choisir. C'est à toi de prendre la décision puisque tu as tous les éléments en main.

    En revanche, si c'est la seule requête spatiale de ta base, qu'elle marche, je pense que tu peux laisser ton code ainsi et avancer. Si plus tard, ton code évolue, que la demande de requête spatiale change, là alors tu reprendras une décision.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  5. #5
    Membre éclairé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Par défaut
    oui je te remercie. a bientôt

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Saisie de données dans une procédure stockée
    Par Hastaroth dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/10/2004, 09h54
  3. Vérification du type de données dans une procédure stockée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/09/2004, 11h20
  4. Marquer une pause dans une procédure stockée
    Par PéPénet dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/11/2003, 10h42
  5. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31

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