it-swarm-eu.dev

Come visualizzare i nomi dei genitori anziché i loro ID

Sto creando il mio componente personalizzato. Nel backend ho l'elenco dei singoli record. Hanno record padre nel DB come parent_id e pertanto vengono visualizzati nel back-end solo come ID. Come visualizzare i nomi di questi genitori anziché i loro ID?

Nel mio models/records.php c'è la query:

$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('id, header, parent_id, ordering, published');
$query->from('#__records');
return $query;

e in views/records/view.html.php c'è $this->items = $this->get('Items'); I nomi dei record sono memorizzati nel DB nel campo header

2
stckvrw

Usa subquery.

SELECT 
    *,
    (SELECT header FROM `tablename` WHERE `id`=r.parent_id) AS parent_header
FROM 
    `tablename` AS r

parent_header ha il nome del record principale.

Con Joomla! JDatabaseQuery oggetto

$db = JFactory::getDBO();

// Create subquery to get `header` column value
$subQuery = $db->getQuery(true)
    ->select('header')
    // You have this row in same table? If not, change table name
    ->from('`#__records`')
    ->where('id=r.parent_id');

$query = $db->getQuery(true)
  ->select('id, header, parent_id, ordering, published')
  // Inject subquery select
  ->select('('.$subQuery->__toString().') AS parent_header')
  ->from('`#__records` AS r');

return $query;

Output della query:

SELECT 
    id, header, parent_id, ordering, published,
    (
        SELECT 
            header
        FROM 
            `lab0f_records`
        WHERE 
            id=r.parent_id
    ) AS 
        parent_header
FROM 
    `lab0f_records` AS r
3
Rene Korss

È necessario unire a sinistra il nome dell'intestazione quando si crea la query nel metodo getListQuery () del modello. Il codice effettivo che utilizza l'oggetto query Joomla è simile al seguente:

$query->select('a.id, a.header, a.parent_id, a.ordering, a.published');
$query->from('#__records AS a');

$query->select('p.header as parent_name');
$query->join('LEFT', '#__records AS p ON p.id = a.parent_id');

Questo sarebbe il modo ufficiale di Joomla di afferrare e utilizzare il nome reale rispetto a un ID. Puoi accedere al nome del genitore utilizzando le seguenti visualizzazioni:

$this->item->parent_name

Una nota a margine sta utilizzando la sintassi MySQL pura non è consigliata, soprattutto se si prevede di rilasciare questo componente su JED (Joomla Extension Directory) poiché non funzionerà su alcuna installazione Joomla che non utilizza MySQL.

Utilizzando esclusivamente le classi di astrazione DB di Joomla per gestire tutte le operazioni DB CRUD, stai assicurando che il codice del tuo componente possa funzionare con qualsiasi DB supportato utilizzato da qualsiasi particolare installazione di Joomla.

Spero che sia di aiuto!

5
Brian Bolli