【问题标题】:Doctrine select query date sqlite教义选择查询日期sqlite
【发布时间】:2019-04-16 07:21:18
【问题描述】:

我想通过带有教义绑定的 php datetime 对象查询数据库日期字段。我没有得到日期数据库字段类型的结果。它适用于日期时间数据库字段类型。 在 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 数据库版本 3.22

Ubuntu 18.04 上的 PHP 7.2.12

【问题讨论】:

  • 您的日期字符串在数据库中的格式如何? date1start 等在字符串化后是什么样子的?格式不同吗?
  • Sqlite create: CREATE TABLE Customer (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, dateofbirth DATE NOT NULL, lastlogin DATETIME DEFAULT NULL);

标签: php symfony doctrine-orm sqlite


【解决方案1】:

同样的问题。试试-&gt;setParameter("data2start", $date2start-&gt;format('Ymd H:i:s'))

【讨论】:

  • 我正在尝试使用学说构建一个多数据库“框架”,我需要将参数准确地设置为日期时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多