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 :

Création de vues avec Doctrine [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 18
    Par défaut Création de vues avec Doctrine
    Bonjour,

    Je me tourne vers vous car je ne trouve aucune solution à mon problème.

    Je suis en train de réaliser un site web pour une association leur permettant d'organiser des départs en vacances. Un onglet "Agenda" contenant un tableau est à leur disposition afin d'ajouter des plages de disponibilités. Mon but était de récupérer dans ma base de données PHPMyAdmin la partie la plus commune à toutes ces plages de disponibilités, ceci afin de leur faciliter la tâche pour retrouver quelle est la période dans laquelle un maximum d'adhérent est disponible.

    Du côté base de données j'ai une table intitulé "Availability" (disponibilités) qui contient entre autres les champs dateFrom et dateTo.

    Voici la page "Agenda" pour mieux visualiser:

    Nom : Capture d’écran 2015-04-16 à 12.03.09.png
Affichages : 1559
Taille : 48,4 Ko

    Mon controller:

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <?php
     
    namespace ASSO\ScheduleBundle\Controller;
     
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
     
    class DefaultController extends Controller
    {
        public function indexAction()
        {
            $repository = $this
                ->getDoctrine()
                ->getManager()
                ->getRepository('ASSOAvailabilityBundle:Availability');
     
            $listAvailability = $repository->findAll();
     
            $em = $this->getDoctrine()->getManager();
            $query = $em->createQuery(
                'DROP VIEW v_recherche_plages_communes;
                DROP VIEW v_plages_communes;
                CREATE VIEW v_recherche_plages_communes AS
                SELECT a1.id AS id_1, a1.dateFrom AS debut_1, a1.dateTo AS fin_1,
                       a2.id AS id_2, a2.dateFrom AS debut_2, a2.dateTo AS fin_2,
                    CASE
    		            WHEN a1.dateFrom >= a2.DateFrom AND a1.dateFrom < a2.dateTo THEN a1.dateFrom
    		            WHEN a1.dateTo <= a2.dateTo THEN a2.dateFrom
                        ELSE NULL
    	            END AS date_debut_commune,
    	            CASE
    		            WHEN a1.dateTo <= a2.dateTo AND a1.dateTo > a2.dateFrom THEN a1.dateTo
    		            WHEN a1.dateFrom <= a2.dateTo THEN a2.dateTo
    		            ELSE NULL
    	            END AS date_fin_commune
                FROM Availability a1
                INNER JOIN Availability a2 ON a1.id <> a2.id;
                CREATE VIEW v_plages_communes AS
                SELECT tmp.id_1,
    	            MAX(tmp.date_debut_commune) AS debut_periode_commune,
    	            MIN(tmp.date_fin_commune) AS fin_periode_commune,
    	            COUNT(*) AS nb_plages_communes
                FROM v_recherche_plages_communes tmp
                WHERE tmp.date_debut_commune IS NOT NULL
    	            AND tmp.date_fin_commune IS NOT NULL
                GROUP BY tmp.id_1;
                SELECT debut_periode_commune, fin_periode_commune
                FROM v_plages_communes
                WHERE nb_plages_communes =
                (
    	            SELECT MAX(nb_plages_communes) AS meilleur_score
    	            FROM v_plages_communes
                )'
            );
     
            $overlappedPeriod = $query->getResult();
     
            return $this->render('ASSOScheduleBundle:Default:index.html.twig', array(
                'availabilities'  => $listAvailability,
                'overlappedPeriods' => $overlappedPeriod
            ));
        }
    }
    Ma requête comporte donc deux vues, sachant que dans PHPMyAdmin les vues et requêtes qui suivent fonctionnent très bien, j'ai essayé de les créer directement dans mon controller (pour un premier test) mais j'ai une erreur qui est la suivante:

    [Syntax Error] line 0, col 0: Error: Expected SELECT, UPDATE or DELETE, got 'DROP'
    Si quelqu'un à une solution pour contourner le problème ou une piste vers laquelle m'aiguiller ?

    En vous remerciant par avance!

  2. #2
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    Expected SELECT, UPDATE or DELETE, got 'DROP'

    il s'attend à avoir : SELECT, UPDATE or DELETE
    et il trouve : DROP

    est ce vraiment nécessaire le DROP ? et pourquoi faire une vue etc... ?
    faut revoir la requête et potasser doctrine
    de plus quand tu reference une entité dans le FROM par ex il faut mettre le namespace par ex: AcmeDemobundle: Produit p



    SINON tu peux toujours faire une requête native mySql par l’intermédiaire de doctrine, google est ton ami

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 18
    Par défaut
    En fait j'essayé sans le DROP et à ce moment là j'ai la même erreur pour CREATE, j'ai donc essayé sans le CREATE et là j'ai la même erreur pour NULL.

    La vue a été créée afin de faciliter son appel par la suite dans les requêtes qui suivent.

  4. #4
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    doctrine se charge déjà de tout ça... c'est de l'objet ça facilite pas mal de chose.


    donc soit tu fais du doctrine(et ça demande un temps d'apprentissage certains) soit tu fais du mySql native par l’intermédiaire de doctrine mais c'est dommage ....
    mais la bonne pratique c'est doctrine.


    choose your way !

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 18
    Par défaut
    En effet c'est une des possibilités que j'avais envisagé, j'avais choisi cette méthode car je me sentais plus à l'aise pour ce genre de requête, car je ne vois pas bien comment retranscrire ces vues avec toutes ces conditions en objet justement.

  6. #6
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    et pour CREATE c'est la même chose, c'est de l'objet :
    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $produit = new Produit();   // un entité produit
    $produit ->setNom("toto");
    ....
     
    $em = persist($produit);   // creer l'enregistrement produit dans la table
    et oui mec !!!







    à toi de voir, si tu veux devenir développeur Symfony ? alors -> doctrine

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

Discussions similaires

  1. [Mapping] Création de vue avec une classe implémentant "AuxiliaryDatabaseObject"
    Par nighthammer dans le forum Hibernate
    Réponses: 0
    Dernier message: 06/08/2012, 15h32
  2. création de vue avec jointures et fonctions mathématiques
    Par lepeule dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/06/2011, 11h17
  3. Création de vues avec requêtes SQL et leur impression
    Par lepeule dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/05/2011, 10h57
  4. Création de vue avec besoin de sous requête
    Par Chtulus dans le forum Langage SQL
    Réponses: 7
    Dernier message: 13/06/2008, 15h34
  5. Création vue avec test d'existence
    Par yan77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/12/2004, 11h44

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