Я хочу запросить поле даты db через объект php datetime с привязкой к доктрине. Я не получаю результатов по типу поля date db. Он работает с типом поля datetime db. На mysql и postgres он работает.
Вместо этого на Sqlite я получаю это странное поведение. Проблема кажется связана с равным сравнением только в поле даты.
Где я не прав?
Это мой класс сущности:
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* App\Entity\Customer
*
* @ORM\Entity()
* @ORM\Table(name = "Customer")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name = "discr", type = "string")
* @ORM\DiscriminatorMap({"base":"BaseCustomer" "extended":"Customer"})
*/
class BaseCustomer
{
/**
* @ORM\Id
* @ORM\Column(type = "integer")
* @ORM\GeneratedValue(strategy = "AUTO")
*/
protected $id;
/**
* @ORM\Column(type = "date")
*/
protected $dateofbirth;
/**
* @ORM\Column(type = "datetime", nullable=true)
*/
protected $lastlogin;
В контроллере:
$datestrchk = "1980-02-05";
$datedtchk = \DateTime::createFromFormat("Y-m-d H:i:s", $datestrchk . " 00:00:00");
$qb = $this->get("doctrine")->getManager()->createQueryBuilder()
->select(array("Customer"))
->from("App:Customer", "Customer")
->where("Customer.dateofbirth = :data")
->setParameter("data", $datedtchk);
$ret = $qb->getQuery()->getResult();
echo count($ret); // NOT FOUND
$datedtchk = \DateTime::createFromFormat("Y-m-d", $datestrchk);
$qb = $this->get("doctrine")->getManager()->createQueryBuilder()
->select(array("Customer"))
->from("App:Customer", "Customer")
->where("Customer.dateofbirth = :data")
->setParameter("data", $datedtchk);
$ret = $qb->getQuery()->getResult();
echo count($ret); // NOT FOUND
$qb = $this->get("doctrine")->getManager()->createQueryBuilder()
->select(array("Customer"))
->from("App:Customer", "Customer")
->where("Customer.dateofbirth = :data")
->setParameter("data", $datestrchk);
$ret = $qb->getQuery()->getResult();
echo count($ret); // OK
$date1start = \DateTime::createFromFormat("Y-m-d H:i:s", "1980-02-04 23:59:59");
$date1end = \DateTime::createFromFormat("Y-m-d H:i:s", "1980-02-05 00:00:00");
$qb = $this->get("doctrine")->getManager()->createQueryBuilder()
->select(array("Customer"))
->from("App:Customer", "Customer")
->where("Customer.dateofbirth >= :data1start AND Customer.dateofbirth <= :data1end")
->setParameter("data1start", $date1start)
->setParameter("data1end", $date1end);
$ret = $qb->getQuery()->getResult();
echo count($ret); // OK
$date2start = \DateTime::createFromFormat("Y-m-d H:i:s", "1980-02-05 00:00:00");
$date2end = \DateTime::createFromFormat("Y-m-d H:i:s", "1980-02-05 00:00:01");
$qb = $this->get("doctrine")->getManager()->createQueryBuilder()
->select(array("Customer"))
->from("App:Customer", "Customer")
->where("Customer.dateofbirth >= :data2start AND Customer.dateofbirth <= :data2end")
->setParameter("data2start", $date2start)
->setParameter("data2end", $date2end);
$ret = $qb->getQuery()->getResult();
echo count($ret); // NOT FOUND
Кодовое обозначение: https://github.com/ComuneFI/BiCoreBundle. (Клиент-> Клиент)
Symfony 3.4.18
Sqlite db версии 3.22
Php 7.2.12 в Ubuntu 18.04
Sqlite create: CREATE TABLE Customer (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, dateofbirth DATE NOT NULL, lastlogin DATETIME DEFAULT NULL);






Та же проблема. Попробуйте ->setParameter("data2start", $date2start->format('Ymd H:i:s'))
Я пытаюсь создать "фреймворк" с несколькими базами данных с доктриной, и мне нужно, чтобы параметр был точно datetime
Как ваши строки даты отформатированы в базе данных? Как
date1startи т. д. Выглядят после преобразования в строку? Это другой формат?