Invoegen, bijwerken en verwijderen van gegevens met behulp van JDatabase

From Joomla! Documentation

This page is a translated version of the page Inserting, Updating and Removing data using JDatabase and the translation is 88% complete.

Outdated translations are marked like this.
Other languages:
English • ‎español • ‎français • ‎Nederlands • ‎русский • ‎中文(台灣)‎
Joomla! 
3.x
Joomla! 
2.5
Versie opmerking

Let op dat veel online voorbeelden $db->query() gebruiken in plaats van $db->execute(). Dit was de oude methode in Joomla 1.5 en 2.5 en zal deprecated (verouderd) berichten geven in Joomla 3.0+.

Deze handleiding is opgesplitst in twee losse delen:

  • Invoegen, bijwerken en verwijderen van gegevens in de database.
  • Selecteren van gegevens uit één of meer tabellen en het ophalen op diverse verschillende formaten.

Deze sectie van de documentatie kijkt naar het invoegen, bijwerken en verwijderen van gegevens uit een databasetabel. Klik, om het andere deel te zien hier

Inleiding

Joomla biedt een geavanceerde database abstractie laag om het gebruik door externe ontwikkelaars te vereenvoudigen. Nieuwe versies van de Joomla Platform API bieden extra functionaliteit welke de database laag verder uitbreidt en bevat functies zoals koppelingen naar een groot aantal database servers en de query-koppeling om de leesbaarheid te vergroten van verbindingscode an het vereenvoudigen van het coderen van SQL.

Joomla kan verschillende soorten SQL database systemen gebruiken en draaien op diverse omgevingen met verschillende tabel-voorvoegsels. Naast deze functies maakt de class automatisch de database verbinding aan. Naast het instantiëren van het object heeft u slechts twee regels code nodig om het resultaat uit de database te krijgen in een verscheidenheid aan formaten. Het gebruik van de Joomla database laag garandeert een maximum aan compatibiliteit en flexibiliteit voor uw extensie.

De query

Joomla's database query's is veranderd sinds het nieuwe Joomla Framework werd geïntroduceerd. "query-chaining" is nu de aanbevolen methode om database query's op te bouwen (hoewel string query's nog ondersteund worden).

Query chaining verwijst naar de methode van koppelen van een aantal methodes, de één na de ander waarbij ieder methode een object terug geeft die de volgende methode kan ondersteunen, waardoor de leesbaarheid verbeterd wordt en de code vereenvoudigd.

Om een nieuwe instantie van de JDatabaseQuery class te verkrijgen gebruiken we de JDatabaseDriver getQuery methode:

$db = JFactory::getDbo();

$query = $db->getQuery(true);

De JDatabaseDriver::getQuery heeft een optioneel argument, $new, welk 'true' of 'false' kan zijn (de standaard is 'false').

Om onze data source te bevragen kunnen we een aantal JDatabaseQuery methodes aanroepen; deze methodes kapselen de gegevens source's query-taal (in de meeste gevallen SQL) in, verbergen query-specifieke syntaxis voor de ontwikkelaar en verhogen de overdraagbaarheid van de broncode van de ontwikkelaar.

Enkele van de meest gebruikte methodes omvatten; select, from, join, where en order. Er zijn ook methodes zoals insert, update en delete voor het wijzigen van de gegevensopslag. Door het koppelen van deze en andere methode aanroepen, kunt u bijna iedere query maken ten opzichte van uw database zonder afbreuk te doen aan de overdraagbaarheid van uw code.

Het invoegen van een record

SQL gebruiken

De JDatabaseQuery class biedt een aantal methodes voor het bouwen van insert query's, waarvan de meest gebruikte zijn insert, columns en values.

// Get a db connection.
$db = JFactory::getDbo();

// Create a new query object.
$query = $db->getQuery(true);

// Insert columns.
$columns = array('user_id', 'profile_key', 'profile_value', 'ordering');

// Insert values.
$values = array(1001, $db->quote('custom.message'), $db->quote('Inserting a record using insert()'), 1);

// Prepare the insert query.
$query
    ->insert($db->quoteName('#__user_profiles'))
    ->columns($db->quoteName($columns))
    ->values(implode(',', $values));

// Set the query using our newly populated query object and execute it.
$db->setQuery($query);
$db->execute();

Een object gebruiken

De JDatabaseDriver class biedt ook een makkelijke methode voor het opslaan van een object direct in de database zodat we een record aan een tabel kunnen toevoegen zonder een regel SQL te schrijven.

// Create and populate an object.
$profile = new stdClass();
$profile->user_id = 1001;
$profile->profile_key='custom.message';
$profile->profile_value='Inserting a record using insertObject()';
$profile->ordering=1;

// Insert the object into the user profile table.
$result = JFactory::getDbo()->insertObject('#__user_profiles', $profile);

Merk op dat we de tabelnaam geen quotes hoeven te geven ; de insertObject methode doet dit voor ons.

De insertObject methode rapporteert een fout als er een probleem is bij het invoegen van het record in de database tabel.

We moeten zeker weten dat het record niet bestaat voordat we hem proberen toe te voegen, het uitvoeren van een soort record controle voor het uitvoeren van de insertObject methode is aanbevolen.

If you are simply inserting the next row in your table (i.e. the database generates a primary key value), you can specify the primary key column-name as the third parameter of the insertObject() method and the method will update the object with the newly generated primary key value.

For example, given the following statement:

$result = $dbconnect->insertObject('#__my_table', $object, 'primary_key');

after execution, $object->primary_key will be updated with the newly inserted row's primary key value.

HINT: Set $object->primary_key to null or 0 (zero) before inserting.

Een record bijwerken

SQL gebruiken

De JDatabaseQuery class biedt ook methodes voor het bouwen van update query's, in het bijzonder update en set. We hergebruiken ook een andere methode die we gebruikten bij het aken van select statements, de where methode.

$db = JFactory::getDbo();

$query = $db->getQuery(true);

// Fields to update.
$fields = array(
    $db->quoteName('profile_value') . ' = ' . $db->quote('Updating custom message for user 1001.'),
    $db->quoteName('ordering') . ' = 2'
);

// Conditions for which records should be updated.
$conditions = array(
    $db->quoteName('user_id') . ' = 42', 
    $db->quoteName('profile_key') . ' = ' . $db->quote('custom.message')
);

$query->update($db->quoteName('#__user_profiles'))->set($fields)->where($conditions);

$db->setQuery($query);

$result = $db->execute();

Een object gebruiken

Zoals insertObject, biedt de JDatabaseDriver class een makkelijke methode voor het updaten van een object.

Hieronder zullen we onze custom tabel updaten met nieuwe waarden via een bestaand primaire-sleutel ID:

// Create an object for the record we are going to update.
$object = new stdClass();

// Must be a valid primary key value.
$object->id = 1;
$object->title = 'My Custom Record';
$object->description = 'A custom record being updated in the database.';

// Update their details in the users table using id as the primary key.
$result = JFactory::getDbo()->updateObject('#__custom_table', $object, 'id');

Net als insertObject, zorgt updateObject voor de quotes rond de tabelnamen voor ons.

De updateObject methode geeft een fout als er een probleem bij het updaten van een record in de database-tabel is.

We moeten ervoor zorgen dat het record al bestaat alvorens te proberen het bij te werken, zodat we een soort record controle moeten toevoegen voor het uitvoeren van de updateObject methode.

Een record verwijderen

Tenslotte is er ook een delete methode om records uit de database te verwijderen.

$db = JFactory::getDbo();

$query = $db->getQuery(true);

// delete all custom keys for user 1001.
$conditions = array(
    $db->quoteName('user_id') . ' = 1001', 
    $db->quoteName('profile_key') . ' = ' . $db->quote('custom.%')
);

$query->delete($db->quoteName('#__user_profiles'));
$query->where($conditions);

$db->setQuery($query);

$result = $db->execute();