我正在开发一个组件,我想在其中显示特定用户组的所有用户。现在我找到了两种解决方案,但我对它们都感到不舒服。
解决方案 1
$usersID = JAccess::getUsersByGroup(3);
$users = array();
foreach($usersID as $cUserID)
{
$users[] = JFactory::getUser($cUserID);
}
每次调用 JFactory::getUser($cUserID) 时,这似乎都会产生两个数据库查询。我真的不想要这个。
解决方案 2
模型内部函数
function getUsers()
{
if(!isset($this->users))
{
$groupID = 3;
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$select = array( 'users.id', 'users.name');
$where = $db->quoteName('map.group_id') . ' = ' . $groupID;
$query
->select($select)
->from( $db->quoteName('#__user_usergroup_map', 'map') )
->leftJoin( $db->quoteName('#__users', 'users') . ' ON (map.user_id = users.id)' )
->where($where);
$db->setQuery($query);
$this->users = $db->loadObjectList();
}
return $this->users;
}
这个工作就像一个魅力,但我觉得应该有一个“更多的 Joomla!方式”这样做。我不喜欢在他们的桌子上工作。
现在我正在使用解决方案 2,但我真的想知道是否有更好的方法来做到这一点。