2011-09-05 12 views
11

Tôi có bảng kiểm tra:Làm thế nào để truy vấn NOT NULL bằng Doctrine?

Test: 
id | name 
1 | aaa 
2 | 
3 | ccc 
4 | aaa 
5 | 
6 | ddd 

Tôi muốn dẫn nơi tên là NOT NULL:

aaa 
ccc 
aaa 
ddd 

Làm thế nào tôi có thể nhận được với:

Doctrine_Core::getTable('Test')->findBy('name', NOTNULL??) <-doesnt working 

và trong mô hình với:

$this->createQuery('u') 
    ->where('name = ?', NOTNULL ???) <- doesnt working 
    ->execute(); 

Trả lời

27

Thử cách này:

$this->createQuery('u') 
    ->where('name IS NOT NULL') 
    ->execute(); 

là cú pháp SQL chuẩn. Doctrine không chuyển đổi các giá trị Null thành sql thích hợp.

+3

cảm ơn, và làm thế nào tôi có thể sử dụng điều này với findby? –

+1

Bạn không thể, bạn sẽ cần phải viết các phương pháp tùy chỉnh của riêng bạn. – Dziamid

2

Thực hiện theo cách của Doctrine, từ trình tạo truy vấn và lớp Expr.

$qb = $entityManager->createQueryBuilder(); 
$result = $qb->select('t') 
     ->from('Test','t') 
     ->where($qb->expr()->isNotNull('t.name')) 
     ->groupBy('t.name') 
     ->getQuery() 
     ->getResult(); 

cũng có hàm riêng biệt().