ti-enxame.com

Como usar dados de outra tabela na minha opinião?

Estou lutando para aprender o Joomla 3.xe estou confuso sobre como associar meu registro a outra tabela e usar os dados associados em meu modo de exibição/formulário. Estou familiarizado com componentes que usam algo semelhante a este: (incluí apenas trechos parciais porque a abordagem com a qual estou familiar parece bastante comum em outros componentes e nos resultados do 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');

visualizações\myview\tmpl\default.php

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

Agora, com o Joomla 3, vejo uma série de funções como prepareTable, getTable, getForm, loadFormData e getItem.

O melhor que posso dizer é o uso de formulários/XML predefinidos, campos e outros que descrevem a tabela principal em grande detalhe. Consigo alterar dados em getItem que são exibidos na exibição, mas não tenho noção de como obter dados utilizáveis ​​a partir do segundo tabela!

Qual é a melhor maneira de associar minha tabela principal a outra e poder exibir essas informações com a exibição. (, por exemplo, JOIN myTable.created_by em #__ users.id para obter algo como a data da última visita.)

5
Al Knight

Não tenho certeza se essa é a melhor maneira de fazê-lo (por favor, comente se existe uma maneira melhor), ou é exatamente o que você está procurando, mas aqui está minha abordagem usando um artigo do Joomla como exemplo:

Arquivos de interesse

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

Modifique view.html.php

Perto do topo de public function display($tpl = null), você verá uma linha como esta:

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

Ele obtém os dados do artigo da função getItem localizada em models\article.php

Duplique essa linha para algo assim:

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

Modifique article.php

Agora você deve adicionar a função para obter os dados de seu interesse com este bloco de código: (nomeado de acordo com a forma como você está chamando, precedido por '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;
}

Na sua opinião, agora você pode acessar esses dados assim:

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

Você pode verificar sando vários modelos em um componente MVC se precisar de uma solução mais abrangente.

7
GDP