web-dev-qa-db-fra.com

Comment utiliser les données d'une autre table dans ma vue?

J'ai du mal à apprendre Joomla 3.x et je suis perplexe quant à la manière de joindre mon enregistrement à une autre table et d'utiliser les données jointes dans mon affichage/formulaire. Je connais bien les composants qui utilisent quelque chose de similaire à ceci: (je n'ai inclus que des extraits partiels, car l'approche que je connais semble assez courante dans d'autres composants et dans mes résultats Google)

models/mymodel.php

// JOIN and retrieve the data I'm interested in:
function getData()
    $query = $db->getQuery(true);
    $query->select('a.name, b.lastvisitDate FROM #__mytable AS a')
          ->innerJoin('#__users AS b ON a.created_by = b.id');

vues\ma vue\tmpl\default.php

// The data from the joined data is available for display something like this
echo "<span>" . $this->item->lastvisitDate. "</span>"

Maintenant, avec Joomla 3, je vois une série de fonctions telles que prepareTable, getTable, getForm, loadFormData et getItem.

Autant que je sache, il utilise des formulaires/XML prédéfinis, des champs et autres qui décrivent la table primaire de manière très détaillée. Je suis capable de changer les données dans getItem qui apparaissent dans la vue, mais je ne sais pas comment obtenir des données utilisables à partir de la seconde table!

Quelle est la meilleure pratique pour joindre ma table principale à une autre et pouvoir afficher ces informations avec la vue? ( par exemple, JOIN myTable.created_by sur #__ users.id pour obtenir quelque chose comme la date de la dernière visite.)

5
Al Knight

Je ne suis pas sûr que ce soit la meilleure façon de le faire (veuillez préciser s'il existe une meilleure solution), ou c'est exactement ce que vous recherchez, mais voici mon approche utilisant un article de Joomla comme exemple:

Fichiers d'intérêt

  • composants\com_content\views\article\view.html.php
  • composants\com_content\models\article.php

Modifiez view.html.php

Près du haut de public function display($tpl = null), vous verrez une ligne comme celle-ci:

$this->item = $this->get('Item');

Il récupère les données de l'article à partir de la fonction getItem située dans models\article.php

Dupliquez cette ligne à quelque chose comme ça:

$this->item = $this->get('Mydata');

Modifier l'article.php

Maintenant, vous devez ajouter la fonction pour obtenir les données qui vous intéressent avec ce bloc de code: (nommé en fonction de la manière dont vous l'appelez, précédé de 'get')

 public function getMydata($pk = null)
{
    $myItemObj = new stdClass();
    $myItemObj->something = 'something you need';

    $db    = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('*')
    ->from($db->quoteName('#__users'))
    ->where($db->quoteName('id') . ' = 467');
    $db->setQuery($query);
    $myItemObj->MydbObj = $db->loadObject();

    return $myItemObj;
}

Selon vous, vous pouvez maintenant accéder à ces données comme ceci:

echo "<span>". $this->myData->something ."</span>";
echo "<span>". $this->myData->MydbObj->username ."</span>";

Vous voudrez peut-être vérifier tilisation de plusieurs modèles dans un composant MVC si vous avez besoin d'une solution plus complète.

7
GDP