2013-06-17 29 views
8

Tôi sử dụng Symfony 2 và Doctrine. Trong cơ sở dữ liệu MySQL của tôi, tôi có một trường kiểu DateTime. Trong tệp Repository của tôi, bằng cách sử dụng QueryBuilder, tôi muốn tìm kiếm trong bảng này chỉ theo ngày (không có thời gian) và chỉ theo thời gian (không có ngày), trong mệnh đề Where của tôi.Chỉ tìm kiếm theo thời gian trong trường DateTime trong Symfony2 và Doctrine

Làm cách nào tôi có thể nhận ra điều này?

+0

bạn có thể sử dụng truy vấn nguồn gốc và sau đó nó liên kết với tổ chức – Nisam

Trả lời

16

Bạn có thể mở rộng và đăng ký hàm DATE() trong doctrine2 để phát với DQL. kiểm tra điều này solution.

Bây giờ nếu bạn không muốn mở rộng doctrine2, đây giải pháp của tôi:

tìm kiếm dựa trên ngày:

Bạn có thể nhận được khoảng cách giữa các datetime của khởi đầu của một ngày và datetime của kết thúc của nó, tôi đã trả lời here.

Đây là giải pháp sạch nhất cho ngày (tôi nghĩ)!

Bây giờ một giải pháp dễ dàng là để so sánh một lĩnh vực datetime như là một chuỗi với NHƯ điều hành, vì vậy bạn cũng có thể làm điều đó:

$query = $repository->createQueryBuilder('u')->where('u.createdAt LIKE :date') 
     ->setParameter('date', '2013-05-06%') 
     ->getQuery(); 

     $users = $query->getResult(); 

tìm kiếm dựa trên giờ:

tôi don Không biết giải pháp khác với DQL so với chuỗi (trừ khi bạn mở rộng học thuyết với DATE), tại đây mã:

$query = $um->getRepository()->createQueryBuilder('u')->where('u.createdAt LIKE :date') 
     ->setParameter('date', '____-__-__ 10:45:__') 
     ->getQuery(); 

Để nhắc bạn, "_" (dấu gạch dưới) nghĩa là 1 ký tự (và bất kỳ ký tự nào!).

Chọn giải pháp của bạn;)

+0

Cảm ơn bạn rất nhiều vì câu trả lời của bạn, bạn' lại là một thiên tài, nó hoạt động hoàn hảo! Cuối cùng, tôi mở rộng và đăng ký hàm DATE() và TIME(). Tôi cũng đã thử các giải pháp khác của bạn và tất cả đều OK! – JohnDoe66

3

Một phần của mã của tôi mà làm việc cho tôi:

$qb->andWhere('s.createdAt LIKE :createdAt'); 
$qb->setParameter('createdAt', $startDate->format("Y-m-d") . "%"); 
Các vấn đề liên quan