2012-04-06 30 views
6

Tôi bị kẹt ở đây và tôi dành 2 ngày để giải quyết vấn đề này nhưng không thành công. Tôi đang viết một truy vấn bên trong kho lưu trữ của tôi để nhận các mục nhập cho tháng hiện tại. đây là câu hỏi của tôi: -INTERVAL 1 MONTH không hoạt động Với symfony2 học thuyết?

$this->getEntityManager() 
->createQuery('SELECT count(a) FROM CollegeStudentBundle:StudentAttendance a where a.student_id='.$id.' 
and a.date > DATE_SUB(CURRENT_TIMESTAMP(),INTERVAL 1 MONTH)') 

Khi tôi cố gắng chạy nó mang lại cho tôi một lỗi

[Syntax Error] line 0, col 133: Error: Expected Doctrine\ORM\Query\Lexer::T_COMMA, got '1' 

Thậm chí tôi đã cố gắng this thing nhưng không giúp tôi.

Trả lời

24

Bạn nên sử dụng tham số ràng buộc:

$query = $em->createQuery('SELECT count(a) FROM CollegeStudentBundle:StudentAttendance a where a.student_id = :id and a.date > :date'); 
$query->setParameter('id', $id); 
$query->setParameter('date', new \DateTime('-1 month')); 
+0

Cảm ơn rất nhiều jkucharovic. Nó rất hữu dụng. Plese u có thể cho tôi biết làm thế nào tôi có thể làm tương tự với INTERVAL 1 YEAR – ScoRpion

+0

'$ query-> setParameter ('date', new \ DateTime ('- 1 year')); ' – jkucharovic

+0

và u có thể cho biết làm thế nào tôi có thể sử dụng NOW ở đây – ScoRpion

7

Bạn phải nhớ rằng DQL không phải là SQL. Lỗi đến từ Doctrine's Lexer chứ không phải từ MySQL. DQL không hỗ trợ INTERVAL (xem list of supported functions).

Tìm hiểu thêm về adding your own functions, cụ thể thêm DATE_ADD với sự hỗ trợ INTERVAL đây: http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html#date-add

+1

này nên là câu trả lời chấp nhận. –

Các vấn đề liên quan