Làm thế nào để sử dụng biểu thức mysql NOW() trong trình truy vấn doctrine?Biểu thức mysql NOW() trong Doctrine QueryBuilder
Trả lời
Trong Doctrine2, bạn phải sử dụng một trong các tùy chọn sau thay vì NOW()
.
này:
CURRENT_TIMESTAMP()
Hoặc:
...
createQuery(...'WHERE x.date = :now')
->setParameter('now', new \DateTime('now'))
...
Nếu bạn muốn chỉ có thời gian hoặc sử dụng ngày chỉ là một trong những: CURRENT_TIME()
và CURRENT_DATE()
Sử dụng xây dựng truy vấn nó sẽ trông như thế này:
$qb
->select('B')
->from('RandomBundle:Banana', 'B')
->where(
$qb->expr()->gt('B.expiresAt', ':now')
)
->setParameter('now', '\'CURRENT_TIMESTAMP()\'');
Lưu ý: báo giá thêm về thông số thiết lập là cần để có được CURRENT_TIMESTAMP()
chức năng làm việc.
Hoặc đơn giản là không tìm thấy
$qb
->select('B')
->from('RandomBundle:Banana', 'B')
->where(
$qb->expr()->gt('B.expiresAt', 'CURRENT_TIMESTAMP()')
);
Trong ví dụ thứ hai, bạn có thể sử dụng ngắn hơn 'B.expiresAt> CURRENT_TIMESTAMP()' so sánh trực tiếp bên trong cuộc gọi 'where' thay vì sử dụng biểu thức trình tạo truy vấn – Clamburger
Tôi giả sử nó được sử dụng thời gian của cơ sở dữ liệu. của máy chủ. Các tùy chọn thay thế là sử dụng một [trình tìm kiếm kết quả/truy vấn gốc] (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html), hoặc để mở rộng Doctrine và viết Doctrine \ ORM \ Query \ AST \ Functions của riêng bạn. – ficuscr
báo cáo liên kết Tài liệu, vui lòng cập nhật. – wesamly
Điều CURRENT_TIMESTAMP() này chưa bao giờ làm việc cho tôi. Bạn có thể cung cấp một ví dụ về cách được sử dụng? Tôi không muốn sử dụng thời gian của máy chủ web thay vì cơ sở dữ liệu. Tôi luôn luôn kết thúc viết SQL thô (vẫn còn ràng buộc params) và gửi cho người xây dựng truy vấn. – ficuscr
Cũng lưu ý ''now'' là tham số mặc định cho' DateTime', vì vậy 'new \ DateTime()' là đủ. –