it-swarm.com.de

Wie kann ich mit Joomlas SQL die Namen der Spalten in einem Objekt oder einer Tabelle erhalten?

Was ist bei der vorhandenen Ausgabe einer Basisabfrage der beste Weg, um die Namen der Spalten im resultierenden Ausgabeobjekt abzurufen, ohne eine zusätzliche COLUMNS-Abfrage für die Datenbank ausführen zu müssen - um Datenbankaufrufe zu speichern?

    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('*');
    $query->from('#__table');
    $db->setQuery($query);
    $results = $db->loadObjectList();

    ----

    foreach($results as $key=>$value)
    {
       echo $key;
    }

Es gibt ein Objekt zurück, aber keiner meiner Versuche, den Schlüssel von key => value abzurufen, scheint zu funktionieren, selbst mit einer foreach-Schleife. Ich möchte keine zusätzlichen Abfragen ausführen, nur um meine Schlüssel zu erhalten. Wie würde ich das mit der vorhandenen Ausgabe von $ results machen?

4
Merlin

Ihr foreach führt dazu, dass $ key ein Arrayschlüssel und $ value eine Zeile aus der Datenbank ist. Wenn Sie Spaltennamen aus dem Ergebnis erhalten möchten, verwenden Sie einfach get_object_vars :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*');
$query->from('#__table');
$db->setQuery($query);
$results = $db->loadObjectList();

// this will return array of object properties
// in format: array('column1'=>'content1','column2'=>'content2')
$properties = get_object_vars($results[0]);

Sie können auch nur ein Array von Arrays anstelle eines Arrays von Objekten anfordern. Es ist so gemacht:

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*');
$query->from('#__table');
$db->setQuery($query);
$results = $db->loadAssocList();

// this will return array of column names properties
// in format: array('column1','column2')
$columns = array_keys($results[0]);
7
Artur Stępień

Um alle Spalten einer Tabelle als Arrays abzurufen, verwenden Sie die JDatabase-Klassenmethode wie folgt:

$db=JFactory::getDBO();
$columnArr=$db->getTableColumns("#__table_name");
foreach ($columnArr as $key => $value) {
    // here $key will be column name and $value will be type
    // process array code
}
3
Pratyush