2

我正在使用 codeigniter 和教义构建一个聊天应用程序。

表:
- 用户
- User_roles
- User_available

关系:
一个用户有很多角色。一个 user_available 有一个用户。

可供聊天的用户将在 user_available 表中。

问题:
我需要让 user_available 中没有 role_id 7 的所有用户。

所以我需要在 DQL 中表达类似的东西(这甚至不是 SQL,只是用文字):

SELECT * from user_available WHERE NOT user_available.User.Role.role_id = 7

真的卡在了这个

编辑:我猜我不清楚。这些表已经映射,Doctrine 为我完成了 INNER JOIN 工作。我正在使用此代码来获取等待时间最长的管理员,但现在我需要用户:

$admin = Doctrine_Query::create()
        ->select('c.id')
        ->from('Chat_available c')
        ->where('c.User.Roles.role_id = ?', 7)
        ->groupBy('c.id')
        ->orderBy('c.created_at ASC')
        ->fetchOne();

现在我需要让等待时间最长的用户,但这不起作用

$admin = Doctrine_Query::create()
        ->select('c.id')
        ->from('Chat_available c')
        ->where('c.User.Roles.role_id != ?', 7)
        ->groupBy('c.id')
        ->orderBy('c.created_at ASC')
        ->fetchOne();
4

2 回答 2

1

我意识到这个问题现在可能已经消失了,但这是我为未来的读者做的:

$admin = Doctrine_Query::create()
        ->select('c.id')
        ->from('Chat_available c')
        ->leftJoin('c.User u')
        ->leftJoin('u.Roles r')
        ->where('r.role_id != ?', 7)
        ->groupBy('c.id')
        ->orderBy('c.created_at ASC')
        ->fetchOne();
于 2010-04-19T11:01:00.243 回答
0

为此,您需要先加入表

使用内部连接将 user_available.id 连接到 user.id

但是,我认为您可能错误地使用了 user_available 表。由于它与 user 表是 1 对 1 匹配的,所以你不能在 user 表中有一个 is_available 字段吗?

于 2010-02-18T09:23:12.447 回答