2012-05-14 47 views
13

Tôi có một cơ sở dữ liệu nơi lưu trữ "ngày hết hạn". Bây giờ tôi muốn ngày hiện tại với ngày hết hạn được lưu trữ so sánh. Nếu ngày hiện tại trước ngày hết hạn, dữ liệu sẽ được hiển thị như bình thường, nhưng nếu dữ liệu hết hạn, tôi muốn dữ liệu đó bị loại trừ.Làm cách nào để so sánh ngày tháng với ngày hiện tại bằng Doctrine 2?

tôi đã cố gắng:

$query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :date') 
    ->setParameters('date', 'now()'); 

Trợ giúp sẽ được mát mẻ, hoặc một số lời khuyên nếu ai đó hiểu được vấn đề của tôi.

Trả lời

13

Ngay bây giờ, bạn đang so sánh expDate cột với văn bản "now()", không phải là kết quả của hàm now().

$em->createQuery('SELECT d FROM test d WHERE d.expDate > CURRENT_DATE()'); 
+0

Mh bây giờ tôi nhận được một ngoại lệ trong đó nêu "Lỗi: Dự kiến ​​chức năng được biết đến, đã 'VỚI DOANH NGHIỆP" – Adi

+1

@Adi: Sai lầm của tôi. Tên của hàm là 'CURRENT_DATE()', không phải là 'NOW()'. – Crozin

+0

'$ em-> createQuery ('SELECT d FROM kiểm tra d WHERE d.expDate> NOW()'); ' –

26

Có một cách khác:

$query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :today') 
    ->setParameter('today', new \DateTime())-> 
+0

Trong trường hợp bất kỳ ai khác giống tôi và không thường sử dụng' createQuery', lưu ý rằng định dạng của điều được đưa ra dưới dạng 'test' ở trên là tên đầy đủ không gian tên của thực thể của bạn. Ví dụ 'SELECT m TỪ MyProject \ Entities \ MyEntity m WHERE m ....'. ([ref] (http://docs.doctrine-project.org/en/2.1/reference/dql-doctrine-query-language.html)) – Sam

+0

Điều này kết thúc hơi chậm hơn 'CURRENT_DATE()', như trong @ Câu trả lời của Crozin. – iisisrael

1

Bạn có thể sử dụng date chức năng để tạo ra một chuỗi được so sánh:

$query = $em->createQuery('SELECT d FROM test d'); 
$query->addWhere("d.exp_date > ?",date("Y-m-d", time())); 
1

Trên thực tế, theo cách của bạn không làm việc nhưng bạn có một lỗi nhỏ trong mã của bạn.

Bạn sử dụng:

$query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :date') 
->setParameters('date', 'now()'); 

Bây giờ bạn có thể thay đổi bằng hai cách để nó hoạt động: 1. Rời khỏi "s" ở "setParameters" -> thiết lập thông số

Hoặc

  1. Sử dụng mảng khi sử dụng "tham số s", trong trường hợp của bạn:

    $query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :date') 
    ->setParameters(array('date' => 'now()');