Skip to content

Commit b01c527

Browse files
committed
refactor: ottimizzazione query laravel
1 parent 7ed1c28 commit b01c527

7 files changed

Lines changed: 173 additions & 114 deletions

File tree

modules/anagrafiche/src/Anagrafica.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public static function fixCliente(Anagrafica $anagrafica)
116116
$anagrafica->save();
117117
} else {
118118
$conto = $anagrafica->id_conto_cliente;
119-
$is_esistente = database()->fetchOne('SELECT id FROM co_piano_dei_conti3 WHERE id = '.$anagrafica['id_conto_cliente']);
119+
$is_esistente = database()->table('co_piano_dei_conti3')->where('id', $anagrafica['id_conto_cliente'])->first();
120120
if (!$is_esistente) {
121121
$anagrafica->id_conto_cliente = null;
122122
$anagrafica->save();
@@ -136,7 +136,7 @@ public static function fixFornitore(Anagrafica $anagrafica)
136136
$anagrafica->save();
137137
} else {
138138
$conto = $anagrafica->id_conto_fornitore;
139-
$is_esistente = database()->fetchOne('SELECT id FROM co_piano_dei_conti3 WHERE id = '.$anagrafica['id_conto_fornitore']);
139+
$is_esistente = database()->table('co_piano_dei_conti3')->where('id', $anagrafica['id_conto_fornitore'])->first();
140140
if (!$is_esistente) {
141141
$anagrafica->id_conto_fornitore = null;
142142
$anagrafica->save();
@@ -149,7 +149,7 @@ public static function fixTecnico(Anagrafica $anagrafica)
149149
{
150150
$database = database();
151151

152-
$presenti = $database->fetchArray('SELECT id_tipo_intervento FROM in_tariffe WHERE id_tecnico = '.prepare($anagrafica->id));
152+
$presenti = $database->table('in_tariffe')->where('id_tecnico', $anagrafica->id)->get()->pluck('id_tipo_intervento')->toArray();
153153

154154
// Aggiunta associazioni costi unitari al contratto
155155
$tipi = TipoSessione::whereNotIn('id', array_column($presenti, 'id_tipo_intervento'))->get();

modules/articoli/src/Articolo.php

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -298,22 +298,26 @@ public function getModuleAttribute()
298298

299299
public function getNomeVarianteAttribute()
300300
{
301-
$valori = database()->fetchArray("SELECT
302-
CONCAT(`mg_attributi_lang`.`title`, ': ', `mg_valori_attributi`.`nome`) AS nome
303-
FROM
304-
`mg_articolo_attributo`
305-
INNER JOIN `mg_valori_attributi` ON `mg_valori_attributi`.`id` = `mg_articolo_attributo`.`id_valore`
306-
INNER JOIN `mg_attributi` ON `mg_attributi`.`id` = `mg_valori_attributi`.`id_attributo`
307-
LEFT JOIN `mg_attributi_lang` ON (`mg_attributi_lang`.`id_record` = `mg_attributi`.`id` AND `mg_attributi_lang`.`id_lang` = ".prepare(\Models\Locale::getDefault()->id).')
308-
INNER JOIN `mg_articoli` ON `mg_articoli`.`id` = `mg_articolo_attributo`.`id_articolo`
309-
INNER JOIN `mg_combinazioni` ON `mg_combinazioni`.`id` = `mg_articoli`.`id_combinazione`
310-
INNER JOIN `mg_attributo_combinazione` ON `mg_attributo_combinazione`.`id_combinazione` = `mg_combinazioni`.`id` AND `mg_attributo_combinazione`.`id_attributo` = `mg_attributi`.`id`
311-
WHERE
312-
`mg_articoli`.`id` = '.prepare($this->id).'
313-
ORDER BY
314-
`mg_attributo_combinazione`.`order`');
315-
316-
return implode(', ', array_column($valori, 'nome'));
301+
$valori = database()->table('mg_articolo_attributo')
302+
->select(database()->raw("CONCAT(`mg_attributi_lang`.`title`, ': ', `mg_valori_attributi`.`nome`) AS nome"))
303+
->join('mg_valori_attributi', 'mg_valori_attributi.id', '=', 'mg_articolo_attributo.id_valore')
304+
->join('mg_attributi', 'mg_attributi.id', '=', 'mg_valori_attributi.id_attributo')
305+
->leftJoin('mg_attributi_lang', function ($join) {
306+
$join->on('mg_attributi_lang.id_record', '=', 'mg_attributi.id')
307+
->where('mg_attributi_lang.id_lang', '=', \Models\Locale::getDefault()->id);
308+
})
309+
->join('mg_articoli', 'mg_articoli.id', '=', 'mg_articolo_attributo.id_articolo')
310+
->join('mg_combinazioni', 'mg_combinazioni.id', '=', 'mg_articoli.id_combinazione')
311+
->join('mg_attributo_combinazione', function ($join) {
312+
$join->on('mg_attributo_combinazione.id_combinazione', '=', 'mg_combinazioni.id')
313+
->on('mg_attributo_combinazione.id_attributo', '=', 'mg_attributi.id');
314+
})
315+
->where('mg_articoli.id', $this->id)
316+
->orderBy('mg_attributo_combinazione.order')
317+
->pluck('nome')
318+
->toArray();
319+
320+
return implode(', ', $valori);
317321
}
318322

319323
// Relazioni Eloquent

modules/articoli/src/Import/CSV.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -401,9 +401,9 @@ public function import($record, $update_record = true, $add_record = true)
401401
unset($record['immagine']);
402402

403403
if (!empty($record['id_fornitore'])) {
404-
$result = $database->fetchOne('SELECT id FROM an_anagrafiche WHERE LOWER(ragione_sociale) = LOWER('.prepare($record['id_fornitore']).')');
404+
$result = database()->table('an_anagrafiche')->whereRaw('LOWER(ragione_sociale) = LOWER(?)', [$record['id_fornitore']])->first();
405405
if ($result) {
406-
$dettagli['id_fornitore'] = $result['id'];
406+
$dettagli['id_fornitore'] = $result->id;
407407
$dettagli['anagrafica_listino'] = $record['id_fornitore'];
408408
}
409409
}
@@ -740,9 +740,9 @@ protected function processaUnitaMisura($record)
740740

741741
try {
742742
$database = database();
743-
$um = $database->fetchOne('SELECT id FROM `mg_unita_misura` WHERE `valore`='.prepare($record['um']));
743+
$um = $database->table('mg_unita_misura')->where('valore', $record['um'])->first();
744744
if (empty($um)) {
745-
$result = $database->query('INSERT INTO `mg_unita_misura` (`valore`) VALUES ('.prepare($record['um']).')');
745+
$result = $database->table('mg_unita_misura')->insert(['valore' => $record['um']]);
746746
if (!$result) {
747747
throw new \Exception('Impossibile creare l\'unità di misura');
748748
}

modules/ddt/actions.php

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -363,19 +363,32 @@
363363
// Estrazione del prezzo dal listino dell'anagrafica se presente
364364
$id_listino = $ddt->anagrafica->id_listino;
365365
if ($id_listino) {
366-
$prezzi_listino = database()->fetchArray(
367-
'SELECT prezzo_unitario, minimo, massimo FROM mg_listini_articoli
368-
INNER JOIN mg_listini ON mg_listini_articoli.id_listino = mg_listini.id
369-
WHERE mg_listini_articoli.id_listino = '.prepare($id_listino).'
370-
AND mg_listini_articoli.id_articolo = '.prepare($riga->id_articolo).'
371-
AND mg_listini_articoli.dir = '.prepare($dir).'
372-
AND mg_listini.attivo = 1
373-
AND mg_listini.data_attivazione <= NOW()
374-
AND (mg_listini_articoli.data_scadenza IS NULL OR mg_listini_articoli.data_scadenza >= NOW())
375-
AND (mg_listini.data_scadenza_predefinita IS NULL OR mg_listini.data_scadenza_predefinita >= NOW())
376-
AND (mg_listini_articoli.minimo IS NULL OR mg_listini_articoli.minimo <= '.prepare($qta).')
377-
AND (mg_listini_articoli.massimo IS NULL OR mg_listini_articoli.massimo >= '.prepare($qta).')'
378-
);
366+
$prezzi_listino = database()->table('mg_listini_articoli')
367+
->select(['prezzo_unitario', 'minimo', 'massimo'])
368+
->join('mg_listini', 'mg_listini_articoli.id_listino', '=', 'mg_listini.id')
369+
->where('mg_listini_articoli.id_listino', $id_listino)
370+
->where('mg_listini_articoli.id_articolo', $riga->id_articolo)
371+
->where('mg_listini_articoli.dir', $dir)
372+
->where('mg_listini.attivo', 1)
373+
->where('mg_listini.data_attivazione', '<=', database()->raw('NOW()'))
374+
->where(function ($query) {
375+
$query->whereNull('mg_listini_articoli.data_scadenza')
376+
->orWhere('mg_listini_articoli.data_scadenza', '>=', database()->raw('NOW()'));
377+
})
378+
->where(function ($query) {
379+
$query->whereNull('mg_listini.data_scadenza_predefinita')
380+
->orWhere('mg_listini.data_scadenza_predefinita', '>=', database()->raw('NOW()'));
381+
})
382+
->where(function ($query) use ($qta) {
383+
$query->whereNull('mg_listini_articoli.minimo')
384+
->orWhere('mg_listini_articoli.minimo', '<=', $qta);
385+
})
386+
->where(function ($query) use ($qta) {
387+
$query->whereNull('mg_listini_articoli.massimo')
388+
->orWhere('mg_listini_articoli.massimo', '>=', $qta);
389+
})
390+
->get()
391+
->toArray();
379392

380393
$prezzo_listino_selezionato = null;
381394
$prezzo_listino_predefinito = null;
@@ -585,12 +598,7 @@
585598
$order = explode(',', post('order', true));
586599

587600
foreach ($order as $i => $id_riga) {
588-
$query = 'UPDATE `dt_righe_ddt` SET `order` = :order_value WHERE id = :id_riga';
589-
$params = [
590-
':order_value' => $i + 1,
591-
':id_riga' => $id_riga,
592-
];
593-
$dbo->query($query, $params);
601+
database()->table('dt_righe_ddt')->where('id', $id_riga)->update(['order' => $i + 1]);
594602
}
595603

596604
break;

0 commit comments

Comments
 (0)