Doctrine ORM DQL (NOT IN) ile satırları dışlamak

2 Cevap php

Ben CodeIgniter ve doktrin ile bir sohbet uygulaması inşa ediyorum.

Tables:
- User
- User_roles
- User_available

Relations:
ONE user have MANY roles. ONE user_available have ONE user.

Sohbet için kullanılabilen kullanıcılar user_available tablo olacaktır.

Problem:
I need to get all users in in user_available that hasn't got role_id 7.

So I need to express in DQL something like (this is not even SQL, just in words):

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

Gerçekten bu bir sıkışmış

EDIT: Guess I was unclear. The tables are already mapped and Doctrine does the INNER JOIN job for me. I'm using this code to get the admin that waited the longest but now I need the user:

$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();

Şimdi ben uzun bekledi kullanıcıyı almak gerekiyor ama bu işe DEĞIL

$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();

2 Cevap

Ben sorun muhtemelen şimdi uzağa gitti biliyoruz, ama bu gelecek okuyucular için bunu nasıl:

$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();

Bunu yapmak için önce tabloları JOIN gerekir

Bir iç user.id için user_available.id katılmak katılmak kullanın

Ancak, yanlış user_available tablo kullanılarak olabilir düşünüyorum. Bu kullanıcı tablosu ile 1-1 eşleşen gibi, sadece kullanıcı tabloda bir is_available alanı olamaz?