0

我有一个 Joomla 票务模块,它在页面的某个部分显示当前用户的当前票证。我想创建用户组,组成员可以在其中查看属于该组的所有票证。我认为最简单的方法是创建 Joomla 组,将用户分配给这些组,当用户登录时,它可以看到其组中的所有票证。我将我的代码添加到函数的开头,但是出了点问题......对于每个用户(当前是“注册”用户)显示相同的结果,最后一个用户票的结果,我不知道为什么:这里是代码:

function gTickets()
{
$user    =& JFactory::getUser();
$user_id = (int) $user->get('id');

//get user_group_id  from db based on current users id
    {...}

//get all users with that user_group_id
$db1->setQuery($db1->getQuery(true)
        ->select('*')
    ->from("#__user_usergroup_map")
    ->where("group_id = '$groupss'")
    );

$groupss1=$db1->loadRowList();      
$return1=array();

// for every user_id    
foreach ($groupss1 as $keya)
{       
    $user_id = $keya[0]; // the id of users

    $where = "";
    if ($this->is_staff)
        $where .= " AND t.`staff_id`='".$user_id."'";
    else
        $where .= " AND t.`customer_id`='".$user_id."'";

    $tickets = $this->_getList(
"SELECT t.id, t.subject, t.last_reply_customer, s.name AS status_name FROM
#__rsticketspro_tickets t LEFT JOIN #__rsticketspro_statuses s ON 
(t.status_id=s.id) WHERE 1 $where ORDER BY `last_reply` DESC", 0, 
$this->params->get('tickets_limit', 3));

    print_r($tickets);      
    return $tickets;
}

我有一些问题,我不知道如何寻找......

  1. sql查询中的字母点字段名是什么?例如:SELECT m.ticket_id, m.message FROM #__ticket_messages m WHERE m.user_id !='".$user_id."
  2. WHERE之前的“m”是什么意思?
  3. “1”在这里做什么:WHERE 1 $where

另外,我查看了 ACL 管理器,但无法使其与此代码一起使用。

编辑:感谢您的快速回答!我又得到了 1 个,我认为这很容易,但我无法让它工作......

如果我将 $ticket 数组的内容打印到另一个数组中,我会得到一个包含多个数组的数组。这就是我的代码不起作用的原因......我得到的数组是:

Array ( 
  [0] => stdClass Object ( 
    [id] => 1 
    [subject] => use1 
    [last_reply_customer] => 1 
    [status_name] => open 
  ) 
) 
Array ( 
  [0] => stdClass Object ( 
    [id] => 3 
    [subject] => use2 
    [last_reply_customer] => 1 
    [status_name] => open 
    )
  [1] => stdClass Object ( 
    [id] => 2 
    [subject] => use2 
    [last_reply_customer] => 1 
    [status_name] => open 
    ) 
) 

我希望数组看起来像这样:

Array ( 
  [0] => stdClass Object ( 
    [id] => 1 
    [subject] => use1 
    [last_reply_customer] => 1 
    [status_name] => open 
    )
  [1] => stdClass Object ( 
    [id] => 3 
    [subject] => use2 
    [last_reply_customer] => 1 
    [status_name] => open 
    )
  [2] => stdClass Object ( 
    [id] => 2 
    [subject] => use2 
    [last_reply_customer] => 1 
    [status_name] => open 
    ) 
) 

谢谢!

编辑:这一切实现起来很复杂吗?

4

1 回答 1

0

查看 ACL 以使该部分正常工作,但要回答您在问题底部发布的 3 个问题:

1) 查询中的 letter.field_name 代表查询中的表 alias.field_name。别名 (m) 使它更容易,因此您不必每次都输入完整的表名。

2) WHERE 之前的 m 实际上是设置表别名,但使用惰性语法。它应该说:

SELECT m.ticket_id, m.message FROM #__ticket_messages AS m

3) “WHERE 1”是表示“if (true)”的 SQL 方式。由于他们在“WHERE 1 $where”之后立即附加 $where 子句,因此生成的查询如下所示:

WHERE 1 AND t.staff_id = '" . $user_id . "'

你最初是编码的吗?还是您在某处捡到的组件?它应该使用查询构建器而不是像现在这样直接使用 SQL,以使其更便携,更清楚它在做什么。

于 2013-03-21T20:41:59.263 回答