From 75e140d7ea34c637b0ecba28daed186c079ae77b Mon Sep 17 00:00:00 2001 From: Beppe Date: Thu, 25 Jul 2024 14:50:08 +0200 Subject: [PATCH] Aggiunta seconda clausola per JOIN nelle API --- .../anagrafiche/src/API/v1/Anagrafiche.php | 44 ++++++++++++------- modules/articoli/src/API/v1/Articoli.php | 38 ++++++++++------ modules/interventi/src/API/v1/Interventi.php | 6 ++- src/API/Manager.php | 12 ++++- 4 files changed, 70 insertions(+), 30 deletions(-) diff --git a/modules/anagrafiche/src/API/v1/Anagrafiche.php b/modules/anagrafiche/src/API/v1/Anagrafiche.php index 9d9512e7f..a8030882a 100755 --- a/modules/anagrafiche/src/API/v1/Anagrafiche.php +++ b/modules/anagrafiche/src/API/v1/Anagrafiche.php @@ -30,41 +30,55 @@ class Anagrafiche extends Resource implements RetrieveInterface, CreateInterface { public function retrieve($request) { - $table = '`an_anagrafiche`'; + $table = 'an_anagrafiche'; $select = [ - '`an_anagrafiche`.*', - '`an_nazioni_lang`.`title` AS nazione', + 'an_anagrafiche.*', + 'an_nazioni_lang.title AS nazione', ]; $joins[] = [ - 'an_nazioni_lang' => '`an_nazioni_lang`.`id_record` = `an_nazioni`.`id` AND `an_nazioni_lang`.`id_lang` = '.\Models\Locale::getDefault()->id, + 'an_nazioni', + 'an_nazioni.id', + 'an_anagrafiche.id_nazione', ]; - $where[] = ['`an_anagrafiche`.`deleted_at`', '=', null]; + $joins[] = [ + 'an_nazioni_lang', + 'an_nazioni_lang.id_record', + 'an_nazioni.id', + 'an_nazioni_lang.id_lang', + \Models\Locale::getDefault()->id, + ]; - $order['`an_anagrafiche`.`ragione_sociale`'] = 'ASC'; + $where[] = ['an_anagrafiche.deleted_at', '=', null]; + + $order['an_anagrafiche.ragione_sociale'] = 'ASC'; if ($request['resource'] != 'anagrafiche') { $type = 'Cliente'; $joins[] = [ - '`an_tipianagrafiche_anagrafiche`', - '`an_anagrafiche`.`idanagrafica`', - '`an_tipianagrafiche_anagrafiche`.`idanagrafica`', + 'an_tipianagrafiche_anagrafiche', + 'an_anagrafiche.idanagrafica', + 'an_tipianagrafiche_anagrafiche.idanagrafica', ]; $joins[] = [ - '`an_tipianagrafiche`', - '`an_tipianagrafiche_anagrafiche`.`idtipoanagrafica`', - '`an_tipianagrafiche`.`id`', + 'an_tipianagrafiche', + 'an_tipianagrafiche_anagrafiche.idtipoanagrafica', + 'an_tipianagrafiche.id', ]; $joins[] = [ - 'an_tipianagrafiche_lang' => '`an_tipianagrafiche_lang`.`idrecord` = `an_tipianagrafiche`.`id` AND `an_tipianagrafiche_lang`.`idlang` = '.\Models\Locale::getDefault()->id, + 'an_tipianagrafiche_lang', + 'an_tipianagrafiche_lang.id_record', + 'an_tipianagrafiche.id', + 'an_tipianagrafiche_lang.id_lang', + \Models\Locale::getDefault()->id, + 'an_tipianagrafiche_lang.title', + ''.$type.'', ]; - - $where[] = ['`an_tipianagrafiche_lang`.`title`', '=', $type]; } return [ diff --git a/modules/articoli/src/API/v1/Articoli.php b/modules/articoli/src/API/v1/Articoli.php index ff3628cb2..dc687013d 100755 --- a/modules/articoli/src/API/v1/Articoli.php +++ b/modules/articoli/src/API/v1/Articoli.php @@ -33,39 +33,51 @@ class Articoli extends Resource implements RetrieveInterface, UpdateInterface, C $table = 'mg_articoli'; $select = [ 'mg_articoli.*', - '`categorie`.`nome` AS categoria', - '`sottocategorie`.`nome` AS sottocategoria', + 'categorie_lang.title AS categoria', + 'sottocategorie_lang.title AS sottocategoria', ]; $joins[] = [ - 'mg_articoli_lang' => 'mg_articoli_lang.id_record = mg_articoli.id AND mg_articoli_lang.id_lang = '.\Models\Locale::getDefault()->id, + 'mg_articoli_lang', + 'mg_articoli_lang.id_record', + 'mg_articoli.id', + 'mg_articoli_lang.id_lang', + \Models\Locale::getDefault()->id, ]; $joins[] = [ - '`mg_categorie` AS categorie', - '`mg_articoli`.`id_categoria`', - '`categorie`.`id`', + 'mg_categorie AS categorie', + 'mg_articoli.id_categoria', + 'categorie.id', ]; $joins[] = [ - 'mg_categorie_lang AS categorie_lang' => '`mg_categorie_lang`.`id_record` = `categorie`.`id` AND `mg_categorie_lang`.`id_lang` = '.\Models\Locale::getDefault()->id, + 'mg_categorie_lang AS categorie_lang', + 'categorie_lang.id_record', + 'categorie.id', + 'categorie_lang.id_lang', + \Models\Locale::getDefault()->id, ]; $joins[] = [ - '`mg_categorie` AS sottocategorie', - '`mg_articoli`.`id_sottocategoria`', - '`sottocategorie`.`id`', + 'mg_categorie AS sottocategorie', + 'mg_articoli.id_sottocategoria', + 'sottocategorie.id', ]; $joins[] = [ - '`mg_categorie_lang` AS sottocategorie_lang' => '`mg_categorie_lang`.`id_record` = `sottocategorie`.`id` AND `mg_categorie_lang`.`id_lang` = '.\Models\Locale::getDefault()->id, + 'mg_categorie_lang AS sottocategorie_lang', + 'sottocategorie_lang.id_record', + 'sottocategorie.id', + 'sottocategorie_lang.id_lang', + \Models\Locale::getDefault()->id, ]; - $where[] = ['`mg_articoli`.`deleted_at`', '=', null]; + $where[] = ['mg_articoli.deleted_at', '=', null]; $whereraw = []; - $order['`mg_articoli`.`id`'] = 'ASC'; + $order['mg_articoli.id'] = 'ASC'; return [ 'table' => $table, diff --git a/modules/interventi/src/API/v1/Interventi.php b/modules/interventi/src/API/v1/Interventi.php index ac318b9c9..fcd2b656c 100755 --- a/modules/interventi/src/API/v1/Interventi.php +++ b/modules/interventi/src/API/v1/Interventi.php @@ -51,7 +51,11 @@ class Interventi extends Resource implements RetrieveInterface, CreateInterface, ]; $joins[] = [ - 'in_statiintervento_lang' => 'in_statiintervento_lang.id_record = in_statiintervento.id AND in_statiintervento_lang.id_lang = '.\Models\Locale::getDefault()->id, + 'in_statiintervento_lang', + 'in_statiintervento_lang.id_record', + 'in_statiintervento.id', + 'in_statiintervento_lang.id_lang', + \Models\Locale::getDefault()->id, ]; $joins[] = [ diff --git a/src/API/Manager.php b/src/API/Manager.php index 34d04847d..a9eb24e81 100755 --- a/src/API/Manager.php +++ b/src/API/Manager.php @@ -180,7 +180,17 @@ class Manager } foreach ($joins as $join) { - $query->leftJoin($join[0], $join[1], $join[2]); + if (count($join) >= 3) { + $query->leftJoin($join[0], function($joinClause) use ($join) { + $joinClause->on($join[1], $join[2]); + + // Aggiungi condizioni aggiuntive se ci sono abbastanza elementi in $join + if (isset($join[3])) { + $joinClause->whereRaw($join[3] . ' = ?', [$join[4]]); + } + + }); + } } if (!empty($where)) {