web-dev-qa-db-fra.com

Comment appliquer des alias dans la clause Select lorsque deux colonnes de tables jointes ont le même nom?

J'essaie de construire un gameliste en ce moment, je me débats pour obtenir les informations détaillées de l'équipe.

#__ je

id     team_home     team_guest
1      1             2
2      2             3

#__ équipe

id     name
1      My Team Name
2      Another Team Name
3      The third Team

Mon code :

// Get the user object.
$user = JFactory::getUser();
// Get the databse object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('a.*');
$query->select('b.name', 'home_name');
$query->select('c.name', 'guest_name');
$query->from($db->quoteName('#__game', 'a'));
$query->join('LEFT', $db->quoteName('#__team', 'b') . ' ON ' . $db->quoteName('a.team_home') . ' = ' . $db->quoteName('b.id'));
$query->join('LEFT', $db->quoteName('#__team', 'c') . ' ON ' . $db->quoteName('a.team_guest') . ' = ' . $db->quoteName('c.id'));
$query->where($db->quoteName('a.published') . ' = 1');
$query->order('a.kickoff ASC');
// Implement View Level Access (if set in table)
if (!$user->authorise('core.options', 'com_component'))
{
    $columns = $db->getTableColumns('#__game');
    if(isset($columns['access']))
    {
        $groups = implode(',', $user->getAuthorisedViewLevels());
        $query->where('a.access IN (' . $groups . ')');
    }
}
$db->setQuery((string)$query);
$items = $db->loadObjectList();
echo '<pre>' . var_export($items,true).'</pre>';
$options = array();
if ($items)
{
    $options[] = JHtml::_('select.option', '', 'Select an option');
    foreach($items as $item)
    {
        //$options[] = JHtml::_('select.option', $item->id, $item->home_name . ' vs ' . $item->guest_name);
    }
}
return $options;

Cela crée un seul "nom" à l'intérieur de l'objet de retour (sûr, sa même clé pour la maison et l'invité) et l'invité écrase la valeur de la maison.

Qu'est-ce que je dois écrire pour la jointure pour obtenir les noms pour la maison et l'invité étant placé dans différentes clés d'objet?

2
Marco

Je l'ai eu maintenant, je devais définir le comme dans les tableaux sélectionnés:

    $db = JFactory::getDBO();
    $query = $db->getQuery(true);
    $query->select('a.*');
    $query->select($db->quoteName(array('b.name'),array('home_name')));
    $query->select($db->quoteName(array('c.name'),array('guest_name')));
...
1
Proximate