我正在开发一个组件,我希望显示特定用户组的所有用户。现在我找到了两个解决方案,但我对这两个解决方案感到不舒服。
解决方案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,但我真的很想知道是否有更好的方法来做到这一点。