Pole daty Doctrine - jak pisać zapytanie
Używam Symfony2 i Doctrine.
Mam pole daty, tutaj jest:
/**
* @ORM\Column(type="date")
*/
protected $date;
W moim formularzu używam pola tekstowego, aby uniknąć domyślnego datepicker Chrome, ale wstawiam obiekty DateTime do bazy danych:
if ($request->isMethod('POST')) {
$form->bind($request);
//Convert string date to DateTime object and send it to database as object
$dateObj = \DateTime::createfromformat('d-m-Y', $expense->getDate());
$expense->setDate($dateObj);
// ...
a następnie chcę znaleźć wszystkie elementy o określonej dacie:
public function findExpensesForDate($user, $date)
{
$q = $this
->createQueryBuilder('e')
->where('e.date = :date')
->andWhere('e.user = :user')
->setParameter('date', $date)
->setParameter('user', $user)
->getQuery();
return $q->getResult();
}
i nazwij to tak:
$expenses_for_today = $this->repository->findExpensesForDate($this->user, $today);
który nic nie zwraca kiedy
$today = new /DateTime();
i zwraca wyniki, gdy
$today_obj = new /DateTime();
$today = $today_obj->format('Y-m-d');
Dlaczego więc, kiedy podaję datę jako obiekt, to nie działa? Czy nie jest powodem, aby używać daty, aby skorzystać z kwerendy z obiektami DateTime? Myślę, że tęsknię za czymś banalnym i ważnym, ale po prostu nie widzę co, albo nie rozumiem dobrze sytuacji. Moje zrozumienie jest następujące: pole ma typ daty, więc powinienem wstawić w nim obiekty DateTime i podczas kwerendy powinienem również obiekty DateTime. Czy możesz mi pomóc to naprawić?
P.S: Próbowałem zmienić pole na datetime:
/**
* @ORM\Column(type="datetime")
*/
protected $date;
ale nie było zmiany.
Czy w ogóle dobrze i dobrze jest zapytać ciągiem? Czy otrzymam przewagę korzystania z obiektów w ten sposób?