Werken met de database in Drupal 7 – les 3 – Statistische query’s (SELECT)
De meest gebruikte vorm van een query in Drupal is de statische query. Een statische query wordt letterlijk doorgestuurd naar de database. Alleen een SELECT-query kan statisch zijn.
Gebruik statische query’s uitsluitend voor zeer eenvoudige bewerkingen. Wanneer je complexe, dynamisch opgebouwde of later aan te passen query’s moet schrijven, gebruik dan dynamische query’s.
Een eenvoudige manier om een statische query uit te voeren is via de querymethode:
Werken met de database in Drupal 7 – les 4 – Dynamische query’s (SELECT)
We zijn nu aangekomen bij het meest interessante deel van de Database API van Drupal: dynamische query’s. Ze worden “dynamisch” genoemd omdat Drupal de querystring automatisch uitbreidt tijdens de uitvoering. Alle query’s voor invoegen (INSERT), bijwerken (UPDATE), verwijderen (DELETE) of samenvoegen (MERGE) kunnen dynamisch zijn. Ook SELECT-query’s kunnen dynamisch of statisch zijn, maar het is aan te raden om ook voor SELECT-query’s dynamische query’s te gebruiken.
Werken met de database in Drupal 7 – les 5 – Extenders (uitbreidingen)
Select-query’s in Drupal ondersteunen zogenaamde extenders (uitbreidingen). Een extender maakt het mogelijk om extra functionaliteit toe te voegen aan een query tijdens de uitvoering. Deze functionaliteit kan bestaan uit aanvullende methoden of wijzigingen in het gedrag van bestaande methoden.
Werken met de database in Drupal 7 – les 6 – Een query dynamisch wijzigen (hook_query_alter)
Een belangrijk kenmerk van dynamische SELECT-query’s is dat andere modules deze query’s “on the fly” kunnen wijzigen. Dit maakt het mogelijk voor andere modules om hun eigen instructies aan een query toe te voegen, waardoor ze het gedrag van de query kunnen beïnvloeden of bijvoorbeeld toegangsbeperkingen op nodes kunnen toepassen. Er zijn drie componenten voor het dynamisch wijzigen van query’s: tagging, meta data en hook_query_alter().
Werken met de database in Drupal 7 – les 7 – Het verwerken van queryresultaten (fetch)
Een SELECT-query retourneert altijd een resultaat met nul of meer records. Er zijn verschillende manieren om de resultaten van een query te verwerken, afhankelijk van wat je ermee wilt doen.
De meest gebruikelijke manier is door middel van een foreach()-lus:
Werken met de database in Drupal 7 – les 8 – Insertquery’s (INSERT INTO)
Insertquery’s moeten altijd gebruikmaken van de querybuilder. Sommige databases vereisen speciale handlers voor LOB’s (Large Objects, zoals TEXT in MySQL) en BLOB’s (Binary Large Objects). Daarom is een abstractielaag noodzakelijk, zodat de specifieke database-driver deze correct kan afhandelen.
Insertquery’s beginnen met de functie db_insert():
Werken met de database in Drupal 7 – les 9 – Updatequery’s (UPDATE)
Updatequery’s moeten altijd gebruikmaken van de querybuilder. Verschillende databases hebben specifieke handlers voor LOB’s (Large Objects, zoals TEXT in MySQL) en BLOB’s (Binary Large Objects), waardoor een abstractielaag nodig is om per driver deze specifieke bewerkingen correct te verwerken.
Updatequery’s beginnen met de functie db_update():
Werken met de database in Drupal 7 – les 10 – Verwijderquery’s (DELETE)
Verwijderquery’s moeten gebruikmaken van de querybuilder. Ze beginnen met de functie db_delete():
Werken met de database in Drupal 7 – les 11 – Merge-query’s (MERGE)
Merge-query’s zijn een speciaal hybride type query. Hoewel de syntaxis voor dergelijke query’s werd gedefinieerd in de SQL-standaard van 2003, ondersteunt vrijwel geen enkele database deze exacte syntaxis. De meeste databases bieden echter een alternatieve manier om vergelijkbare functionaliteit te bereiken via hun eigen specifieke syntaxis. De merge-query builder in Drupal abstraheert dit concept in een objectstructuur, zodat de query per database kan worden gecompileerd volgens haar eigen implementatie.
Werken met de database in Drupal 7 – les 12 – Queryvoorwaarden (WHERE, HAVING, LIKE)
Een queryvoorwaarde maakt het mogelijk alleen die records te selecteren die aan bepaalde criteria voldoen — bijvoorbeeld nodes die niet ouder zijn dan twee weken, of termen waarin het woord “drupal” voorkomt, enzovoort. In SQL gebruiken we WHERE en HAVING om beperkingen op te leggen aan SELECT-, UPDATE- en DELETE-query’s. In dynamische query’s in Drupal is een vergelijkbaar mechanisme voor voorwaarden geïmplementeerd. Dit werkt op dezelfde manier voor alle drie de querytypen: selecteren, bijwerken en verwijderen.