Я создаю приложение чата с помощью codeigniter и doctrine.Исключить строки с помощью Doctrine ORM DQL (NOT IN)
Таблицы:
- Пользователь
- User_roles
- User_available
Отношения:
один пользователь имеет множество ролей. У пользователя ONE user_available есть один пользователь.
Пользователи, доступные для общения в чате, будут находиться в таблице user_available.
Проблема:
Мне нужно, чтобы все пользователи в user_available, что не получил role_id 7.
Так что мне нужно, чтобы выразить в DQL что-то вроде (это даже не SQL, только на словах):
SELECT * от user_available WHERE NOT user_available.User.Role.role_id = 7
Действительно застрял на этом один
EDIT: Думаю, я был неясен. Таблицы уже сопоставлены, и 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();