database>connections
Salve dopo aver usato entityQuery e avendo necessità di usare le join, sono passato alla connesione del dataBase.
Ho letto sia documentazione che esempi (pochi) e sono passato a fare delle prove.
Le tabelle a cui mi poso connettere sono user, node e node_field_data. Dove posso trovare la documentazione che mi spiega la differenza tra queste due tabelle?
Con la propiretà type posso filtrare il C.T. che mi serve ma non ho capito come fare ad utilizzare i vari campi del C.T.
A parte nid e title se devo usare un campo personalizzato, tipo field_anagrafica non ho capito come fare.
Ho visto che c'è la proprietà addfield() e fields() ma non ho capito come creare l'alias e fare riferimento ad un campo personalizzato
Gaetano
Risposte
Prova a spiegare testualmente
Prova a spiegare testualmente la query che ti serve magari è più semplice poterti dare una mano.
Ciao Maurizio, è un piacere
Ciao Maurizio, è un piacere constatare che ci sei. E' passato un po' di tempo dalla domanda.
Attualmente sto usando getQuery() o entityQueryAggregate(). Però è un uso approssimativo in quanto non so tutte le clausole che posso utilizzare. Non trovo documentazione e le indicazioni sono minime.
La cosa che mi serve è poter eseguire query sql più complesse ma se ho capito bene possibili solo con la connessione diretta al adatabase, però la maggior parte la sconsiglia per questioni di sicurezza
Sicuramente finchè usi le API
Sicuramente finchè usi le API avrai una maggiore integrazione con tutti gli aspetti di Drupal dal layer di permessi sui contenuti alla compatibilità con diversi sistemi db.
Niente ti vieta di usare query complesse in linguaggio sql, basta fare attenzione a non introdurre possibili falle di sql injection; avrai tutta la libertà necessaria e performance superiori.
Qui puoi trovare i metodi applicabili all'oggetto che ritorna getQuery
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21...
trovo molto utile la pagina relativa alle condition in cui ti spiega anche come costruire eventuali join su entityreference:
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21...
Un esempio "voglio estrarre tutte le entità ufficio la cui ultima revisione è stata effettuata da un utente con mail pippo@pluto.it"
<?php
\Drupal::entityTypeManager()
->getStorage('ufficio')
->getQuery()
->accessCheck(FALSE)
->latestRevision()
->condition('uid.entity:user.mail', 'pippo@pluto.it')
->execute());
?>
Per le query statiche (es: query()) e dinamiche (es: select()) un buon punto di partenza è la documentazione ufficiale:
https://www.drupal.org/docs/drupal-apis/database-api
Es query statica:
<?php
\Drupal::database()->query("select id,cod_ufficio from {ufficio} where status = :status", [':status' => 1])->fetchAll();
?>
Es stessa query ma dinamica:
<?php
\Drupal::database()->select('ufficio', 'u')->fields('u',['id','cod_ufficio'])->condition('status', 1)->execute()->fetchAll();
?>
Spero ti sia utile!
Sicuramente mi sarà utile, il
Sicuramente mi sarà utile, il link che mi hai segnalato l'avevo letto ma superficialmente
Quello che non sono riuscito ancora a capire è dove trovare le varie clausole. Dal tuo esempio
->accessCheck(FALSE)
->latestRevision()
->condition('uid.entity:user.mail', 'pippo@pluto.it')
la cluasola ->latestRevision() non la conoscevo proprio.
Dove posso trovare tutte le clausole che posso usare in getQuery o nella slelect ?
Grazie per i chiarimenti
Per getQuery te l'ho indicata
Per select fai riferimento a https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21Query%21Select.php/class/Select/9.0.x
Grazie devo imparare leggere
Grazie devo imparare leggere meglio le pagine