it-swarm.com.de

So wählen Sie Datensätze einzeln mit JDatabaseQuery aus

In Programmiersprachen gibt es zwei Muster zum Auswählen von Datensätzen aus der Datenbank:

//prepare SELECT statement
while($record = $query->fetchRow())
{
    //do the job
}

Und der zweite:

//prepare SELECT statement
$recordsArray = $query->fetchAllRows();
//do the job with all the records in a 2-dimensional array

Zu meiner Überraschung ist in JDatabaseQuery nur die zweite Option verfügbar: loadRowList, loadAssocList usw.

Als ich versuchte:

$query = $db->getQuery(true);
$query->select(array('id', 'name'))
    ->from($db->quoteName('#__my_table'));

$db->setQuery($query);
while($row = $db->loadAssoc())
{
    var_dump($row);
}

Es hing. Kann ich die Datensätze einzeln abrufen, anstatt ein zweidimensionales Array zu erhalten?

1
user4035

Es gibt einige Methoden des Joomla-Datenbank-Treibers, die nicht auf der Dokumentseite dokumentiert sind. Die API-Übersichtsseite für 3.8 ist hier

https://api.joomla.org/cms-3/classes/JDatabaseDriver.html

Was Sie suchen, ist der Iterator.

$query = $db->getQuery(true);
$query->select('id,name')->from($db->qn('#__my_table'));
$db->setQuery($query);
$iterator = $db->getIterator();
foreach($iterator as $row){
    var_dump($row);
}

Es wird jeweils eine stdClass zurückgegeben, und Sie können die Schleife beenden, um sie anzuhalten.

1
jamesgarrett