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?
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]);
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
}