Laravel 5

Query Builder - LEFT JOIN, clause ON avec deux conditions: syntaxe incorrecte

  • Avatar de CedricMeschin
    Membre depuis :
    04/02/2018
    Messages :
    13

    Bonsoir,

    je souhaite construire la requête suivante via le query builder, du moins une de ses conditions:

    left join hostgroup hgtype on hgr.hostgroup_hg_id = hgtype.hg_id AND substr(hgtype.hgname,1,5)='Type'

    je suis arrivé à cette construction:

    ->leftjoin('hostgroup as hgtype', function($join){
    $join->on('hgr.hostgroup_hg_id','=','hgtype.hg_id');
    $join->on( DB::RAW("substr(hgtype.hgname,1,5)='Type'"));})

    mais le résultat obtenu est incorrect avec l'insertion de (='') en fin de critère:

    left join hostgroup as hgtype on hgr.hostgroup_hg_id = hgtype.hg_id and substr(hgtype.hgname,1,5)='Type' = ``

    il ne s'agit là que d'une petite partie de la requête. Le reste est globalement sur le même modèle et fonctionnelle en SQL standard.
    J'avoue ne pas comprendre d'où peut bien sortir de dernier "égal" et la chaine vide.
    Merci pour votre aide.
    cordialement,

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2123

    Salut,

    Essaie comme ça :

    $join->on( DB::raw("substr(hgtype.hgname,1,5)"), '=', 'Type'));
  • Avatar de CedricMeschin
    Membre depuis :
    04/02/2018
    Messages :
    13

    Bonsoir,

    Merci Bestmomo. C'est effectivement la correction qui m'est venue "pendant mon sommeil" :D
    j'ai tout de même du modifier la syntaxe pour qu'il prenne Type_ comme une chaine et non un champ.
    La syntaxe correcte dans mon cas est donc la suivante:

    $join->on( DB::RAW("substr(hgtype.hgname,1,5)"),'=' ,DB::RAW('"Type"'));})

    ce qui donne le résultat correct suivant:

    left join hostgroup as hgtype on hgr.hostgroup_hg_id = hgtype.hg_id and substr(hgtype.hgname,1,5) = "Type"

    Sujet clos.

Vous ne pouvez pas répondre à ce sujet.