Consultez la formation SEO spéciale Wordpress
par WebRankInfo / Ranking Metrics

Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Jeu Aoû 17, 2017 22:03

Bonjour

Je termine ma version de l'ORM Eloquent.

Actuellement, j'ai deux boucles imbriquées, que j'aimerais réduire à une boucle ( O(n) ).

D'après la syntaxe SQL, est-il possible de mettre au moins 2 tokens identiques ( par ex. WHERE, ou bien SELECT, etc.. ) dans la même requête SQL, ceci dans la même requête ( ou sous-requête ) ?

Evidemment, pour deux requêtes SQL imbriquées c'est possible, mais à l'intérieur d'une même sous-requête ou requête ?

Si c'est impossible, celà me permettrait d'avoir une logique en O(n). ;)

Merci beaucoup de vos réponses.
Haut
25 Réponses
Messages: 395

Enregistré le: 28 Aoû 2004

Message le Ven Aoû 18, 2017 11:05

Hello,

si tu écrivais ici un peu tes requêtes?
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Ven Aoû 18, 2017 11:32

Pardon Bossboss

Par "boucles", j'entendais des boucles du type :
Code: Tout sélectionner
 for($i = 0; $i <= $i_max; $i++){ for($j = 0; $j <= $j_max; $j++){ /* Le code PHP  */}  } 


Je travaille ce moment, ( s'il on peut appeler çà un travail ), sur une implémentation personnelle de l'ORM Eloquent en PHP.

Il s'agit purement et simplement, de la syntaxe d'une instruction MySQL brute ( pas Eloquent ).

Cette syntaxe, autorise-t-elle le même token identique ( exemple WHERE , ou bien SELECT, ou autre... ), plus que une fois par profondeur de sous-requête ?

Par exemple, pour une requête simple ( sans sous-requête ) :

Code: Tout sélectionner
  SELECT `Column1`, `Column2` FROM `Table` WHERE `Id`=value;


Est-ce qu'il se pourrait, que soit un SELECT, soit un WHERE, apparaisse plusieurs fois dans la même instruction MySQL, et ( évidemment ), dans la même requête, ( ou bien ) dans la même sous-requête ?

Je dis pour l'un ou l'autre de ces token, mais ma question est valable pour n'importe quel token MySQL.

Pour spout ;) : Mon ORM est quasiment fait, je termine les closures et la prise en compte MySQL.

Merci beaucoup de ton aide.
Haut
Messages: 507

Enregistré le: 23 Fév 2013

Message le Ven Aoû 18, 2017 11:44

Je ne comprends pas ce que tu cherches, s'il y a 2 SELECT par exemple, c'est forcément que l'une est une sous-requête de l'autre. SELECT Truc, (SELECT * FROM table2) FROM table1;...
Ou alors un UNION entre 2 requêtes SELECT...
Mais en mettre 2 dans une requête, pour quoi faire ? Quel est ton but ? Les mot-clés SELECT/FROM/WHERE/etc... ne peuvent être qu'une seule fois dans une requête, c'est qu'il n'y a pas de raison qu'ils y soient plusieurs fois...
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Ven Aoû 18, 2017 12:15

Bonjour Rick38

C'est super, tu m'apporte la réponse que je cherchais. ;)

Je vais pouvoir faire une bijection de l'ordre des tokens rencontrés ( dans Eloquent ), à l'ordre des tokens de l'instruction MySQL produite.

Donc, à chaque fois qu'un token Eloquent ( $token ) est rencontré, j'incrémente $this->indice, puis je fais :
Code: Tout sélectionner
 $this->index[$this->indiceSubQuery][$token] = $this->indice;


J'alimente $this->arrayArgs[$this->indiceSubQuery][$token][$this->indice] d'après les arguments de la fonction $token().

Au moment de la reconstruction du MySQL résultant, je ferai :

Code: Tout sélectionner
                             

  /*
   * TABLE ( tous les tokens Eloquent  ),
   *  sont des const de 0 ( TABLE ) à 52 ( GET ).
   *
   * L'ordre définit l'ordre séquentiel
   * d'apparition des tokens
   * du MySQL résultant.
   */
  for($key = self::TABLE; $key <= self::GET; $key++)
  {
      $tmp_indice = $this->index[$this->indiceSubQuery][$key];

     /*
      *   Utilisation des variables enregistrées dans : $arrayArgs[$this->indiceSubQuery][$key][$tmp_indice]
      * ( si différent de null ).
      */

  }




Comme celà, j'ai une boucle au lieu de deux boucles imbriquées.

Merci beaucoup de ton aide !

Respectueusement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Sam Aoû 19, 2017 16:53

Et voilà ;)

Code: Tout sélectionner
        Syntaxe Eloquent :
        ****************

        $connexion->TABLE('CHEVAUX')
                        ->SELECT(['NUMCH', 'NOMCH'])
                        ->WHERE_BETWEEN(
                        ['NUMCH', [1000, 1010]]
                        ->GET()


      Syntaxe Eloquent interprétée :
      ****************************

                TABLE(CHEVAUX)
                ->SELECT `NUMCH`, `NOMCH`
                ->WHERE `NUMCH` BETWEEN 1000 AND 1010

      Résultat :
      ********

Array
(
    [0] => Array
        (
            [NUMCH] => 1000
            [NOMCH] => NENDI
        )

    [1] => Array
        (
            [NUMCH] => 1001
            [NOMCH] => COLONEL:DzORENS
        )

    [2] => Array
        (
            [NUMCH] => 1002
            [NOMCH] => PATIENT
        )

    [3] => Array
        (
            [NUMCH] => 1003
            [NOMCH] => PANACHE:DzHA
        )

    [4] => Array
        (
            [NUMCH] => 1004
            [NOMCH] => PICSOU:DE:LA:FARGE
        )

    [5] => Array
        (
            [NUMCH] => 1005
            [NOMCH] => ORLYHEART
        )

    [6] => Array
        (
            [NUMCH] => 1006
            [NOMCH] => TON:JEU
        )

    [7] => Array
        (
            [NUMCH] => 1007
            [NOMCH] => GIANCARLO
        )

    [8] => Array
        (
            [NUMCH] => 1008
            [NOMCH] => TIME:FOR:PADDY
        )

    [9] => Array
        (
            [NUMCH] => 1009
            [NOMCH] => FORLIPRAL:(SPA)
        )

    [10] => Array
        (
            [NUMCH] => 1010
            [NOMCH] => HILLRIYA
        )

)

Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Mer Aoû 23, 2017 21:02

Bonjour

J'ai tout fait, sauf les fonctions When() ( WHEN() dans mon ORM ) .

J'ai testé les choses suivantes :

Avec GET() ou CHUNK() , et WHERE avec OR_WHERE ( sous-requête avec Closure et deux WHERE ), et LIMIT 5,

Avec INSERT() et WHERE(),

Avec UPDATE() et WHERE(),

Avec DELETE() et WHERE().

Les sous-requêtes ont l'air de fonctionner, avec une seule fonction ( récursive ) qui produit le SQL classique à partir de la syntaxe de départ Eloquent, et rend cette instruction SQL.

Les deux seuls prérequis : Mettre TABLE() au début, et les instructions de lecture ( GET() | FIRST() | PLUCK() | CHUNK() ) ou d'écriture-modification ( INSERT() | INSERT_GET_ID() | REPLACE() | REPLACE_GET_ID() | UPDATE() ) à la fin de l'instruction PHP Eloquent.

Ceci, parce que ces fonctions déclenchent la fonction CONSTRUCT_SQL($indiceQuery = 0) , qui rend le SQL.

Les autres fonctions, peuvent être mises dans n'importe quel ordre.

Je vais tester soigneusement, et prochainement proposer une interface sur mon site, pour tester toutes les possibilités de la syntaxe Eloquent.

Il sera possible, d'entrer dans un champ de saisie le code Eloquent ( n'importe lequel ) , puis appui sur Enter, puis affichage du SQL.

Ce devrait être prêt dans une semaine.

Bien amicalement.

Jean François Ortolo
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Jeu Aoû 24, 2017 17:43

Bonjour

Pour l'interface de test, je n'arrive pas à déclencher l'instruction Eloquent, avec le handle de la classe Database pointant sur l'instruction Eloquent.

Je dispose d'une simple chaîne de caractères ( transmise par $_POST ) genre :

$sql = "TABLE('CHEVAUX')->SELECT['NUMCH', 'NOMH'])->WHERE('NUMCH', 1000)->GET();"

Je voudrais déclencher :

$connexion = newDatabase('');

echo $connexion->$sql;

Que ce soit en direct ou avec passthru() , exec(), shell_exec() ou eval() ou les guillemets obliques rien à faire, il me rejette.

C'est pour l'interface de test promise dans mon précédent message.

Je ne sais pas quoi faire.

Merci beaucoup de votre aide.

Respectueusement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Ven Aoû 25, 2017 13:01

Rebonjour

Help, help, je n'arrive pas à rabouter le handle de la classe Database(""), à la chaîne ( en $_GET ), contenant les fonctions Eloquent.


Code: Tout sélectionner

$sql = "TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMH')->WHERE('NUMCH', 1000)->GET();"

 /*
  * Essai 1 :
  */

  $connexion = new Database("");  // Fonctionne, connexion avec ma database locale "turf".

  echo $connexion->$sql;       // Me rejette, $connexion est un objet, $sql une string.


 /*
  *  Essai 2 :
  */
 $connexion = new Database("");  // Fonctionne, connexion avec ma database locale "turf".

  echo `$connexion->$sql`;       //  Pas d'erreur,  rien ne n'affiche.

  /*
  * Essai 3 :
  */

 passthru('/usr/bin/php -R $connexion = new Database(""); $connexion->$sql; 2>&1');

  /*
  Résultat :
Catchable fatal error: Object of class Database could not be converted to string in /var/www/html/Eloquent/interface_orm.php on line 5749     

  Même chose pour exec() et shell_exec().
  */



Que faire ?

Merci.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Sam Aoû 26, 2017 9:31

Bonjour

Je suis en train de faire un mini mini compilateur de l'instruction Eloquent, mettant les fonctions et arguments dans des array.

Ceci, pour pouvoir déclencher l'instruction Eloquent, à partir de la variable $sql rendue en GET par mon formulaire de test.

Théoriquement, par exemple avec :

Code: Tout sélectionner

  $func = array("TABLE", "SELECT", "WHERE", "GET");

  $args = array("'CHEVAUX'", array('NUMCH', 'NOMCH'), array('NUMCH', 2000), null);

  $tmp_count = count($func);

 /*
  * Là, il y a $tmp_count = 4 fonctions, et deux arguments par fonction.
  */

  $conn = new Database("");

  echo $conn->$func[0]($args[0])->$func[1]($args[1][0], $args[1,1])->$func[2]($args[2][0], $args[2,1])->$func[3]();




Là mes questions :

1) Ce procédé fonctionne-t-il ?

2) Comment automatiser les différentes valeurs de $tmp_count et de nombres d'arguments ?

J'ai déjà prévu le cas des arrays dans les arguments, pour l'instant je dispose ( pas testé ), des $func, $args, et je suis capable d'affecter les arguments sous forme d'array.

Merci beaucoup de vos réponses.

Amicalement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Dim Aoû 27, 2017 21:30

Hé bé

C'est seulement pour les tests.

J'ai fait un micro compilateur, qui traduise le champ de saisie ( syntaxe Eloquent ) , en instruction Eloquent pouvant passer à la moulinette de mon ORM.

Tous les tokens sont dans des variables indicées, je peux m'en servir pour déclencher les fonctions de manière dynamique.


Voici ce que celà donne pour l'instant :

Avant interprétation = tel que inscrit dans le champ de saisie.

Après interprétation ( string ) = après passage au compilateur, en essayant de traduire les array en chaînes de caractères.

Après interprétation ( array ) = après passage au compilateur, prêt théoriquement ( pas testé ) à être interprété par mon ORM.

La difficulté, provient de prévoir tous les cas, je ferai plus de tests demain.

En même temps que les tests, j'essaierai de passer la version interprétée array à mon ORM, en le configurant pour qu'il exécute les sql résultants.

Je me demande seulement, si ce sera possible de faire plusieurs requêtes indépendantes dans des boucles imbriquées.

Ceci, avec des CHUNK() en boucle externe.

Code: Tout sélectionner

/*
 * Champ de saisie tel quel.
 */
Instruction Eloquent avant interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE(['NUMCH', 30])->GET()

/*
 * Après passage au compilateur, version string.
 */
Instruction Eloquent ( string ) après interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 30)->GET()

/*
 * Après passage au compilateur, version array.
 */
Instruction Eloquent ( array ) après interprétation : TABLE('CHEVAUX')=>SELECT('NUMCH', 'NOMCH')=>WHERE(Array ( [0] => 'NUMCH' [1] => 30 ) =>GET()



Je sais que la syntaxe présentée est fausse pour le WHERE, mais çà marche comme celà pour toutes les fonctions.

Merci me dire ce que vous en pensez.

Respectueusement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Ven Sep 01, 2017 22:15

Rebonjour

Suis en train de me colleter avec les index des arrays paramètres des fonctions Eloquent pour le formulaire de test.

Quasiment fini ce formulaire de test

Vais dormir un peu, car trop de soirée après 11h c'est pas terrible. ;)

Sur le plan technique, c'est du petit data-mining ou du finite state machine, mais je récupère d'abord.

Excusez-moi de l'attente avant de mettre le formulaire de test sur mon site.

Respectueusement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Sam Sep 02, 2017 19:11

Dur, dur...

Voilà le résultat pour faire des instructions Eloquent exécutables à partir d'énoncés sous forme de chaînes de caractères :

Je n'ai pas encore testé de passer les résultats interprétables à la moulinette de mon orm.

Pour l'instant, je cherche à corriger les keys des arrays résultantes, là où c'est nécessaire : ( INSERT, UPDATE , etc... ).

Je vais tester pour la fonction CHUNK() prochainement.

En effet cette fonction contient un premier paramètre plat ( nombres de lignes des boucles ), et une Closure ( fonction anonyme ), je ne vois pas comment la reproduire sous forme exécutable ( pour les tests ).

Ceci, en vue de vous présenter ce formulaire de saisie sur mon site , pour que vous testiez mon orm.

Merci de vos suggestions.


Code: Tout sélectionner

   Instruction Eloquent 1 avant interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 2000)->GET()

   Instruction Eloquent 1 ( string ) après interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 2000)->GET()

   Instruction Eloquent 1 ( array ) interprétable : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 2000)->GET()



   Instruction Eloquent 2 avant interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE([['NUMCH', '>', 2000],['NOMCH', 'LIKE', 'C%']])->GET()

   Instruction Eloquent 2 ( string ) après interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE([['NUMCH', '>', 2000],['NOMCH', 'LIKE', 'C%']])->GET()

   Instruction Eloquent 2 ( array ) interprétable : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE(Array
(
    [0] => Array
        (
            [0] => 'NUMCH'
            [1] => '>'
            [2] => 2000
        )

    [1] => Array
        (
            [0] => 'NOMCH'
            [1] => 'LIKE'
            [2] => 'C%'
        )

)
->GET()


   Instruction Eloquent 3 avant interprétation : TABLE('CHEVAUX')->INSERT(['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 3 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT(['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 3 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        (
            [0] => 'NUMCH' => 2300
            [1] => 'NOMCH' => 'APLUSBEGALIX1'
        )

)


   Instruction Eloquent 4 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2']])

   Instruction Eloquent 4 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2']])

   Instruction Eloquent 4 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        (
            [0] => 'NUMCH' => 2300
            [1] => 'NOMCH' => 'APLUSBEGALIX1'
        )

    [1] => Array
        (
            [0] => 'NUMCH' => 2301
            [1] => 'NOMCH' => 'APLUSBEGALIX2'
        )

)


   Instruction Eloquent 5 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3']])

   Instruction Eloquent 5 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3']])

   Instruction Eloquent 5 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        (
            [0] => 'NUMCH' => 2300
            [1] => 'NOMCH' => 'APLUSBEGALIX1'
        )

    [1] => Array
        (
            [0] => 'NUMCH' => 2301
            [1] => 'NOMCH' => 'APLUSBEGALIX2'
        )

    [2] => Array
        (
            [0] => 'NUMCH' => 2302
            [1] => 'NOMCH' => 'APLUSBEGALIX3'
        )

)


   Instruction Eloquent 6 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3'],['NUMCH' => 2303, 'NOMCH' => 'APLUSBEGALIXr4']])

   Instruction Eloquent 6 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3'],['NUMCH' => 2303, 'NOMCH' => 'APLUSBEGALIXr4']])

   Instruction Eloquent 6 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        (
            [0] => 'NUMCH' => 2300
            [1] => 'NOMCH' => 'APLUSBEGALIX1'
        )

    [1] => Array
        (
            [0] => 'NUMCH' => 2301
            [1] => 'NOMCH' => 'APLUSBEGALIX2'
        )

    [2] => Array
        (
            [0] => 'NUMCH' => 2302
            [1] => 'NOMCH' => 'APLUSBEGALIX3'
        )

    [3] => Array
        (
            [0] => 'NUMCH' => 2303
            [1] => 'NOMCH' => 'APLUSBEGALIXr4'
        )

)


   Instruction Eloquent 7 avant interprétation : TABLE('CHEVAUX')->WHERE('NUMCH', 2000)->UPDATE(['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 7 ( string ) après interprétation : TABLE('CHEVAUX')->WHERE('NUMCH', 2000)->UPDATE(['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 7 ( array ) interprétable : TABLE('CHEVAUX')->WHERE('NUMCH', 2000)->UPDATE(Array
(
    [0] => Array
        (
            [0] => 'NUMCH' => 2302
            [1] => 'NOMCH' => 'APLUSBEGALIX1'
        )

)

Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Dim Sep 03, 2017 10:00

Bonjour

J'ai corrigé les keys des arrays.

Merci de me dire si les keys comportent des erreurs.

Pour la fonction CHUNK(), ( et en général pour les fonctions comportant une Closure : WHERE, WHEN ( pas encore fait ) ), je ne vois pas comment donner la possibilité de tester.

Sinon, je vais tester la possibilité d'exécuter les codes exécutables ci-dessous, le plus tôt possible.


Code: Tout sélectionner

   Instruction Eloquent 1 avant interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 2000)->GET()

   Instruction Eloquent 1 ( string ) après interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 2000)->GET()

   Instruction Eloquent 1 ( array ) après interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 2000)->GET()

   Instruction Eloquent 1 ( array ) interprétable : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 2000)->GET()



   Instruction Eloquent 2 avant interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE([['NUMCH', '>', 2000],['NOMCH', 'LIKE', 'C%']])->GET()

   Instruction Eloquent 2 ( string ) après interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE([['NUMCH', '>', 2000],['NOMCH', 'LIKE', 'C%']])->GET()

   Instruction Eloquent 2 ( array ) interprétable : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE(Array
(
    [0] => Array
        (
            [0] => 'NUMCH'
            [1] => '>'
            [2] => 2000
        )

    [1] => Array
        (
            [0] => 'NOMCH'
            [1] => 'LIKE'
            [2] => 'C%'
        )

)
->GET()



   Instruction Eloquent 3 avant interprétation : TABLE('CHEVAUX')->INSERT(['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 3 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT(['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 3 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        (
            ['NUMCH'] => 2300
            ['NOMCH'] => 'APLUSBEGALIX1'
        )

)




   Instruction Eloquent 4 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2']])

   Instruction Eloquent 4 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2']])

   Instruction Eloquent 4 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        (
            ['NUMCH'] => 2300
            ['NOMCH'] => 'APLUSBEGALIX1'
        )

    [1] => Array
        (
            ['NUMCH'] => 2301
            ['NOMCH'] => 'APLUSBEGALIX2'
        )

)




   Instruction Eloquent 5 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3']])

   Instruction Eloquent 5 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3']])

   Instruction Eloquent 5 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        (
            ['NUMCH'] => 2300
            ['NOMCH'] => 'APLUSBEGALIX1'
        )

    [1] => Array
        (
            ['NUMCH'] => 2301
            ['NOMCH'] => 'APLUSBEGALIX2'
        )

    [2] => Array
        (
            ['NUMCH'] => 2302
            ['NOMCH'] => 'APLUSBEGALIX3'
        )

)




   Instruction Eloquent 6 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3'],['NUMCH' => 2303, 'NOMCH' => 'APLUSBEGALIXr4']])

   Instruction Eloquent 6 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3'],['NUMCH' => 2303, 'NOMCH' => 'APLUSBEGALIXr4']])

   Instruction Eloquent 6 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        (
            ['NUMCH'] => 2300
            ['NOMCH'] => 'APLUSBEGALIX1'
        )

    [1] => Array
        (
            ['NUMCH'] => 2301
            ['NOMCH'] => 'APLUSBEGALIX2'
        )

    [2] => Array
        (
            ['NUMCH'] => 2302
            ['NOMCH'] => 'APLUSBEGALIX3'
        )

    [3] => Array
        (
            ['NUMCH'] => 2303
            ['NOMCH'] => 'APLUSBEGALIXr4'
        )

)




   Instruction Eloquent 7 avant interprétation : TABLE('CHEVAUX')->WHERE('NUMCH', 2000)->UPDATE(['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 7 ( string ) après interprétation : TABLE('CHEVAUX')->WHERE('NUMCH', 2000)->UPDATE(['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 7 ( array ) interprétable : TABLE('CHEVAUX')->WHERE('NUMCH', 2000)->UPDATE(Array
(
    [0] => Array
        (
            ['NUMCH'] => 2302
            ['NOMCH'] => 'APLUSBEGALIX1'
        )

)




Merci beaucoup de votre aide.

Très respectueusement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Dim Sep 03, 2017 11:43

Rebond

J'ai corrigé le problème de la parenthèse fermante.

Merci de m'indiquer toutes les erreurs ayant pu se glisser dans ces arrays ci-dessous.

Je vais vérifier la possibilité d'exécuter le code résultant dès ce matin.

Amicalement.

Code: Tout sélectionner

   Instruction Eloquent 1 avant interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 2000)->GET()

   Instruction Eloquent 1 ( string ) après interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 2000)->GET()

   Instruction Eloquent 1 ( array ) interprétable : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 2000)->GET()



   Instruction Eloquent 2 avant interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE([['NUMCH', '>', 2000],['NOMCH', 'LIKE', 'C%']])->GET()

   Instruction Eloquent 2 ( string ) après interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE([['NUMCH', '>', 2000],['NOMCH', 'LIKE', 'C%']])->GET()

   Instruction Eloquent 2 ( array ) interprétable : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE(Array
(
    [0] => Array
        (
            [0] => 'NUMCH'
            [1] => '>'
            [2] => 2000
        )

    [1] => Array
        (
            [0] => 'NOMCH'
            [1] => 'LIKE'
            [2] => 'C%'
        )

)
)->GET()



   Instruction Eloquent 3 avant interprétation : TABLE('CHEVAUX')->INSERT(['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 3 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT(['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 3 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    ['NUMCH'] => 2300
    ['NOMCH'] => 'APLUSBEGALIX1'
)
)



   Instruction Eloquent 4 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2']])

   Instruction Eloquent 4 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2']])

   Instruction Eloquent 4 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        (
            ['NUMCH'] => 2300
            ['NOMCH'] => 'APLUSBEGALIX1'
        )

    [1] => Array
        (
            ['NUMCH'] => 2301
            ['NOMCH'] => 'APLUSBEGALIX2'
        )

)
)



   Instruction Eloquent 5 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3']])

   Instruction Eloquent 5 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3']])

   Instruction Eloquent 5 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        (
            ['NUMCH'] => 2300
            ['NOMCH'] => 'APLUSBEGALIX1'
        )

    [1] => Array
        (
            ['NUMCH'] => 2301
            ['NOMCH'] => 'APLUSBEGALIX2'
        )

    [2] => Array
        (
            ['NUMCH'] => 2302
            ['NOMCH'] => 'APLUSBEGALIX3'
        )

)
)



   Instruction Eloquent 6 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3'],['NUMCH' => 2303, 'NOMCH' => 'APLUSBEGALIX4']])

   Instruction Eloquent 6 ( string ) après interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3'],['NUMCH' => 2303, 'NOMCH' => 'APLUSBEGALIX4']])

   Instruction Eloquent 6 ( array ) interprétable : TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        (
            ['NUMCH'] => 2300
            ['NOMCH'] => 'APLUSBEGALIX1'
        )

    [1] => Array
        (
            ['NUMCH'] => 2301
            ['NOMCH'] => 'APLUSBEGALIX2'
        )

    [2] => Array
        (
            ['NUMCH'] => 2302
            ['NOMCH'] => 'APLUSBEGALIX3'
        )

    [3] => Array
        (
            ['NUMCH'] => 2303
            ['NOMCH'] => 'APLUSBEGALIX4'
        )

)
)



   Instruction Eloquent 7 avant interprétation : TABLE('CHEVAUX')->WHERE('NUMCH', 2000)->UPDATE(['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 7 ( string ) après interprétation : TABLE('CHEVAUX')->WHERE('NUMCH', 2000)->UPDATE(['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX1'])

   Instruction Eloquent 7 ( array ) interprétable : TABLE('CHEVAUX')->WHERE('NUMCH', 2000)->UPDATE(Array
(
    ['NUMCH'] => 2302
    ['NOMCH'] => 'APLUSBEGALIX1'
)
)

Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Dim Sep 03, 2017 16:00

Bonjour

Cà marche en mettant les variables indicées "en dur" dans l'instruction Eloquent envoyée à mon orm.

Par exemple :

Code: Tout sélectionner

  // Ce code est fait automatiquement.
 
  $func1 = 'TABLE';
  $func2 = 'SELECT';
  $func3 = 'WHERE';
  $func4 = 'GET';

  $arg11 = 'CHEVAUX';

  $arg21 = 'NUMCH';
  $arg22 = 'NOMCH';

  $arg31 = 'NUMCH';
  $arg32 = 2000;

 //  Et voici l'instruction   Eloquent exécutable :

  $conn = new Database("");

  $conn->$func1($arg11)->$func2($arg21, $arg22)->$func3($arg21, $arg32)->$func4();



Cà marche, mais en dur, en fonction des nombres de paramètres par fonction.


Voici ma question :

Pour automatiser la mise en forme de l'ordre Eloquent, j'ai besoin de pouvoir appeler une fonction en spécifiant un nombre variable de paramètres.

Comment fait-on dans ce cas ?

Super merci pour votre réponse.

Respectueusement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Ven Sep 08, 2017 17:32

Bonjour

Le problème du nombre variable de paramètres a été résolu avec l'aide du site http://www.hardware.fr

Je n'ai pas encore testé d'exécuter ce que j'obtiens avec mon ORM, cependant lors d'essais précédents çà marchait.

Maintenant voilà ce que j'obtiens :

Code: Tout sélectionner

    Instruction Eloquent 1 avant interprétation 
: TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE('NUMCH', 2000)->GET()

    Instruction Eloquent 1 ( array ) interprétable :         TABLE('CHEVAUX')->SELECT('NUMCH','NOMCH')->WHERE('NUMCH',2000)->GET()


    Instruction Eloquent 2 avant interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE(['NUMCH', 2000])->GET()

    Instruction Eloquent 2 ( array ) interprétable :         TABLE('CHEVAUX')->SELECT('NUMCH','NOMCH')->WHERE(Array
(
    [0] => 'NUMCH'
    [1] => 2000
)
)->
GET()


    Instruction Eloquent 3 avant interprétation : TABLE('CHEVAUX')->INSERT(['NUMCH' => 171030, 'NOMCH' => 'APLUSBEGALIX1'])

    Instruction Eloquent 3 ( array ) interprétable :         TABLE('CHEVAUX')->INSERT(Array
(
    ['NUMCH'] => 171030
    
['NOMCH'] => 'APLUSBEGALIX1'
)
)


    Instruction Eloquent 4 avant interprétation : TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE([['NUMCH', '>', 2000],['NOMCH', 'LIKE', 'C%']])->GET()

    Instruction Eloquent 4 ( array ) interprétable :         TABLE('CHEVAUX')->SELECT('NUMCH','NOMCH')->WHERE(Array
(
    [0] => Array
        
(
            [0] => 'NUMCH'
            [1] => '>'
            [2] => 2000
        
)

    [1] => Array
        
(
            [0] => 'NOMCH'
            [1] => 'LIKE'
            [2] => 'C%'
        )

)
)->
GET()


    Instruction Eloquent 5 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2']])

    Instruction Eloquent 5 ( array ) interprétable :         TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        
(
            ['NUMCH'] => 2300
            
['NOMCH'] => 'APLUSBEGALIX1'
        )

    [1] => Array
        
(
            ['NUMCH'] => 2301
            
['NOMCH'] => 'APLUSBEGALIX2'
        )

)
)


    Instruction Eloquent 6 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3']])

    Instruction Eloquent 6 ( array ) interprétable :         TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        
(
            ['NUMCH'] => 2300
            
['NOMCH'] => 'APLUSBEGALIX1'
        )

    [1] => Array
        
(
            ['NUMCH'] => 2301
            
['NOMCH'] => 'APLUSBEGALIX2'
        )

    [2] => Array
        
(
            ['NUMCH'] => 2302
            
['NOMCH'] => 'APLUSBEGALIX3'
        )

)
)


    Instruction Eloquent 7 avant interprétation : TABLE('CHEVAUX')->INSERT([['NUMCH' => 2300, 'NOMCH' => 'APLUSBEGALIX1'],['NUMCH' => 2301, 'NOMCH' => 'APLUSBEGALIX2'],['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX3'],['NUMCH' => 2303, 'NOMCH' => 'APLUSBEGALIX4']])

    Instruction Eloquent 7 ( array ) interprétable :         TABLE('CHEVAUX')->INSERT(Array
(
    [0] => Array
        
(
            ['NUMCH'] => 2300
            
['NOMCH'] => 'APLUSBEGALIX1'
        )

    [1] => Array
        
(
            ['NUMCH'] => 2301
            
['NOMCH'] => 'APLUSBEGALIX2'
        )

    [2] => Array
        
(
            ['NUMCH'] => 2302
            
['NOMCH'] => 'APLUSBEGALIX3'
        )

    [3] => Array
        
(
            ['NUMCH'] => 2303
            
['NOMCH'] => 'APLUSBEGALIX4'
        )

)
)


    Instruction Eloquent 8 avant interprétation : TABLE('CHEVAUX')->WHERE('NUMCH', 2000)->UPDATE(['NUMCH' => 2302, 'NOMCH' => 'APLUSBEGALIX1'])

    Instruction Eloquent 8 ( array ) interprétable :         TABLE('CHEVAUX')->WHERE('NUMCH',2000)->UPDATE(Array
(
    ['NUMCH'] => 2302
    
['NOMCH'] => 'APLUSBEGALIX1'
)
)





Il me reste à faire ( pour le formulaire de test, pour l'ORM c'est fait ), la possibilité d'un argument de fonction plat ( nombre ), et d'une fonction anonyme comme deuxième paramètre. ( pour CHUNK() ).

Merci beaucoup de vos suggestions.

Amicalement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Sam Sep 09, 2017 17:26

Rebonjour

Merci de tester.

Cette url permet uniquement ( pour l'instant ), de traduire le champ de saisie ( instruction Eloquent ), en une string interprétable par mon ORM maison, mais sans passage à la moulinette de celui-ci.

J'ai simplement besoin de savoir, si la deuxième ligne ( interprétable string ), est rigoureusement identique à la ligne du dessus ( champ de saisie original ).

Ceci, dans tous les cas, quel que soit le contenu du champ de saisie ( syntaxe conforme Eloquent ).

Le champ de saisie est sur une seule ligne.

Exemple de syntaxe Eloquent :

Code: Tout sélectionner

  TABLE('CHEVAUX')->SELECT('NUMCH', 'NOMCH')->WHERE([['NUMCH', '>', 2000],['NOMCH', 'LIKE', 'DE%']])->GET();



Voici l'url :

https://www.pronostics-courses.fr/essai_mysql/interface_orm.php

Après les tests, j'adapterai pour que la deuxième ligne ( exécutable ) soit envoyée à l'ORM.

Merci beaucoup pour vos tests.

Amicalement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Dim Sep 10, 2017 18:44

Voili, voilou

Je tiens à votre disposition si vous voulez, l'url pour des tests en réel de mon ORM.

Même url que précédemment :

https://www.pronostics-courses.fr/essai_mysql/interface_orm.php

Histoire de rire, ma Bdd est accessible avec seulement une autre database ( copiée ), pour qu'il soit impossible de gâter ma Bdd.

Il est possible de faire des lectures, insert et update.

Vous pouvez tester, merci de me dire ce qui manque à mon ORM. ;)

Spout ne va pas aimer la syntaxe Eloquent v3. ;)

Il y a nécessité ( pour les lectures ) de donner des noms des colonnes ( pas de * ).

Pour infos :

CHEVAUX(NUMCH, NOMCH),

JOCKEYS(NUMJO, NOMJO),

TERRAINS(NUMT, NOMT),

COURSES(ID, NUMCRS, NUMT, DATECRS, NUMCH, NUMCH, NUMJO, PARTANT, RANG, POIDS, MOYEN, REUNION, COURSE, NUMH, COTES, CORDE, DEFER, SEXE, AGE, GAIN),

NOM_COURSE(NUMCRS, COURSE),

Etc...

Voià c'est suffisant pour des essais.

Attention pompez pas tout, les NUMCRS vont jusqu'à : 15.906, les NUMCH jusqu'à : 171.971, etc...

Vous pouvez utiliser en lecture la fonction : LIMIT(nombre) ou
TAKE(nombre) ( théoriquement ), et OFFSET() et SKIP() ( jamais essayé ).

Merci de vos retours.

J'espère qu'il y aura des critiques ( féroces :) ).

Respectueusement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Lun Sep 11, 2017 8:35

Je vous demande pardon.

Les limites : LIMIT(nombre), etc... doivent être avant le ->GET() et autres PLUCK().

Pour les tests, il faut obligatoirement mettre à la fin ( après le reste ), l'instruction de lecture ( ->GET(), ->PLUCK(), ), ou autre ( UPDATE(), INSERT(), etc... ).

Le WHERE de sélection doit être avant, sinon tous les enregistrements sont concernés.

Merci beaucoup de vos réponses.

Mes respects.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Jeu Sep 14, 2017 19:44

Rebonjour

Voici l'url :

https://www.pronostics-courses.fr/essai_mysql/interface_orm.php

Maintenant les SELECT * , INSERT et REPLACE multiples ( en une seule ligne ), sont interprétés et exécutés.

Par exemple :

Code: Tout sélectionner

  TABLE('CHEVAUX')->WHERE(['NUMCH', 30])->GET()

  Donne : SELECT * FROM `CHEVAUX` WHERE `NUMCH`=30

  TABLE('CHEVAUX')->REPLACE([['NUMCH' => 200000, 'NOMCH' => 'STUPIDE'],['NUMCH' => 200001, 'NOMCH' => 'ABRUTI']])

  Se transforme en :

  REPLACE INTO `CHEVAUX`('NUMCH', 'NOMCH') VALUES (200000, 'STUPIDE'), (200001, 'ABRUTI')

  Dans les deux cas, le SQL est exécuté.



Merci beaucoup de votre aide.

Respectueusement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Dim Sep 17, 2017 17:30

Bonjour

Maintenant, l'ORM supporte les fonctions agrégats.

( COUNT(), MAX('Column'), MIN('Column'), AVG('Column'), et SUM('Column') ).

Y a-t-il d'autres aggregates dans Eloquent ?

J'ai repéré des fonctions agrégats classiques de SQL, mais je peux m'en tenir à la syntaxe Eloquent 3 ?

Merci.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Mer Sep 20, 2017 13:33

Rebonjour

Voici ce qui n'est pas implémenté dans cet ORM :

- UNION()
- JSON Columns types ( pour les WHERE ),
- Fonctions Aggregate autres que : COUNT(), MAX(), MIN(), AVG(), SUM() ( pour l'instant ),
- ADD_SELECT(),
- WHEN().

Pour le reste, je dois encore vérifier ou mettre au point :

- RAW(),
- WHERE() avec OR_WHERE() ( les deux sont implémentés ) ( facile ),
- WHERE_EXISTS(), ( facile )
- LATEST() ( facile ),
- INSERT_GET_ID() et REPLACE_GET_ID() ( facile ),
- TRUNCATE ( à vérifier ). ( Eviter de tester, j'aurais des tables MySQL réduites à zéro. ;) )

La syntaxe est celle d'Eloquent, avec moins de capacité Orienté Objet.

Il est nécessaire de ne faire qu'une instruction à la fois.

Et... La classe est réellement instanciée, ( une fois par script ), et non pas statique, on ne met pas des deux points mais des flèches.

Exemple :

Code: Tout sélectionner


  $conn 
= new Database("");

  $result = $conn->TABLE('COURSES')->JOIN('CHEVAUX', 'COURSES.NUMCH', '=', 'CHEVAUX.NUMCH')->JOIN('JOCKEYS', 'COURSES.NUMJO', '=', 'JOCKEYS.NUMJO')->WHERE('COURSES.ID', '>', '1709100000')->SELECT('COURSES.ID', 'CHEVAUX.NOMCH', 'JOCKEYS.NOMJO')->ORDER_BY('COURSES.ID', 'ASC')->GET();

  print_r($result);

 


"Database" est la classe de l'ORM, la classe singleton de connexion à la BDD est : "DB".

Evidemment, le constructeur de Database déclenche la connexion par DB.

Les fonctions en majuscules, sont des méthodes de Database.

Merci à vous de tester :

https://www.pronostics-courses.fr/essai_mysql/interface_orm.php

On entre dans le champ de saisie, ( sans "$conn->" ), en commençant par : TABLE().

La syntaxe est celle d'Eloquent.

La BDD à dispo est : "new_turf".

Amusez-vous bien.

Amicalement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Dim Oct 01, 2017 12:52

Bonjour

A propos de l'ORM Eloquent ( la syntaxe ) :

Il est possible de faire des join multiples du genre :

Code: Tout sélectionner

  TABLE('COURSES')->JOIN('CHEVAUX', function($join) {
           $join->ON('COURSES.NUMCH', '=', 'CHEVAUX.NUMCH')->OR_ON('Une_Table.Column', '?', 'Une_autre_Table.Column2');})->SELECT('COURSES.ID', 'COURSES.NUMCH', 'CHEVAUX.NOMCH', etc...)->GET();



Je bute sur ce que je dois mettre dans le OR_ON().

A quoi sert cette instruction OR_ON() ( orOn() en langage Eloquent ) ?

A la rigueur, je pourrais mettre une autre condition de join ( donc en OU inclusif ) sur les mêmes tables COURSES et CHEVAUX, mais cette instruction orON() a-t-elle réellement une utilité ?

Y a -t-il des cas où des conditions "OU" auraient une quelconque utilité, en ce qui concerne les JOIN ?

C'est pratiquement le dernier test que je fais sur mon ORM.

Merci beaucoup de vos réponses.

Respectueusement.
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Mar Oct 03, 2017 18:40

Rebonjour

Voilà, il me semble que j'ai testé mon ORM sous toutes les coutures.

Revoici l'url : https://www.pronostics-courses.fr/essai_mysql/interface_orm.php

Un formulaire facile à remplir, -> syntaxe Eloquent :

Code: Tout sélectionner

  // Exemple :

  TABLE('CHEVAUX')->ORDER_BY('NUMCH', 'DESC')->LIMIT(10)->GET()




Voici les tables MySQL possibles :

CHEVAUX('NUMCH', 'NOMCH'),

JOCKEYS('NUMJO', 'NOMJO'),

TERRAINS('NUMT', 'NOMT'),

COURSES('ID', 'NUMCRS', 'NUMT', 'DATECRS', 'NUMCH', 'NUMCH', 'NUMJO', 'PARTANT', 'RANG', 'POIDS', 'MOYEN', 'REUNION', 'COURSE', 'NUMH', 'COTES', 'CORDE', 'DEFER', 'SEXE', 'AGE', 'GAIN'),

NOM_COURSE('NUMCRS', 'COURSE'),

Etc...

Vous pouvez faire tous les JOIN que vous voulez, faire des UPDATE, INSERT, REPLACE, DELETE, SELECT, WHERE ( toutes versions ), etc...

Les fonctions non implémentées sont : WHEN() et ADD_SELECT(), et aussi les colonnes de type JSON ne sont pas supportées.

Le fonctions sont en majuscules, il faut parfois mettre un underscore ( souligné ) :

Exemple : WHERE_BETWEEN() au lieu de WhereBetween() , etc... dans le cas où une majuscule côtoie une minuscule.

Les fonctions agrégats de Eloquent sont supportées.

Après clic sur "Ok", la ligne SQL Relationnel s'affiche, ainsi que le contenu de la BDD.

La Database "new_turf' est donc pleinement accessible en lecture, écriture et modification.

La fonction TRUNCATE() est implémentée, je ne sais plus si elle est activée.

Enjoy ! ;)
Haut
Messages: 2767

Enregistré le: 14 Aoû 2002

Message le Mer Oct 11, 2017 19:28

Bon, bon.

Sur mon ordinateur, j'ai porté trois répertoires de mon site vers mon ORM.

En particulier, la partie de mon site qui produit des pronostics pour mon site partenaire, fonctionne très bien ( après quelques retouches de mon ORM ), et même plus rapidement. ;)

J'en ai encore pour quelques semaines avant de tester mon site en réel.

On verra.

Amicalement.
Haut

Formation recommandée sur ce thème :

Formation SEO spéciale Wordpress : apprenez à optimiser le référencement naturel d'un site fait avec Wordpress... Formation Ranking Metrics animée par un expert SEO / Wordpress.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.