web-dev-qa-db-fra.com

Comment obtenir les noms des colonnes d'un objet ou d'une table avec le code SQL de Joomla?

Avec la sortie existante d'une requête de base, quel serait le meilleur moyen d'obtenir les noms des colonnes dans l'objet de sortie résultant sans avoir à exécuter une requête COLUMNS supplémentaire sur la base de données - afin de sauvegarder les appels de base de données?

    $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;
    }

Il retourne un objet, mais aucune de mes tentatives pour obtenir la clé de clé => valeur ne semble fonctionner, même avec une boucle foreach. Je ne veux pas lancer de requêtes supplémentaires uniquement pour obtenir mes clés. Comment ferais-je cela avec la sortie existante de $ résultats?

4
Merlin

Votre foreach donnera lieu à une situation où $ key est une clé de tableau et $ valeur est une ligne de la base de données. Si vous voulez obtenir les noms de colonnes du résultat, utilisez simplement 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]);

Vous pouvez également simplement demander un tableau de tableaux au lieu d'un tableau d'objets. C'est fait comme ça:

$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ń

Pour obtenir toutes les colonnes d'une table sous forme de tableaux, utilisez la méthode de classe JDatabase comme suit:

$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