Fae*_*ery 2 date symfony doctrine-orm
我正在使用Symfony2和Doctrine.
我有一个日期字段,这里是:
/**
* @ORM\Column(type="date")
*/
protected $date;
Run Code Online (Sandbox Code Playgroud)
在我的表单中,我使用文本字段来避免Chrome默认的datepicker,但我在数据库中插入DateTime对象:
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);
// ...
Run Code Online (Sandbox Code Playgroud)
然后我想找到具有特定日期的所有项目:
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();
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
$expenses_for_today = $this->repository->findExpensesForDate($this->user, $today);
Run Code Online (Sandbox Code Playgroud)
什么时候什么都不返
$today = new /DateTime();
Run Code Online (Sandbox Code Playgroud)
并返回结果
$today_obj = new /DateTime();
$today = $today_obj->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)
那么为什么当我将日期作为对象时,这不起作用?是不是使用日期字段的原因是利用DateTime对象的查询?我想我错过了一些微不足道的重要事情,但我看不清楚是什么,或者我不能很好地理解这种情况.我的理解是这样的:字段是date类型,所以我应该在其中插入DateTime对象,在查询时我也应该使用DateTime对象.你能帮我解决这个问题吗?
PS:我尝试将字段更改为datetime:
/**
* @ORM\Column(type="datetime")
*/
protected $date;
Run Code Online (Sandbox Code Playgroud)
但没有变化.
用字符串查询是否可行?在查询时,我会获得使用对象的优势吗?
我认为这是因为DateTime对象太具体而且还有小时,分钟和秒,所以它不能等于数据库中的注册日期!
如果要使用DateTime对象,则需要获取当天开始日期和结束日期以获取当天的所有结果!您必须比较日期间隔以获取它之间的所有日期.
首先,获取当天的开始日期和结束日期(为了简化,我们将在第二天开始时将结束日期作为基础,我们将在请求中将其排除在外):
$fromDate = new \DateTime('now'); // Have for example 2013-06-10 09:53:21
$fromDate->setTime(0, 0, 0); // Modify to 2013-06-10 00:00:00, beginning of the day
$toDate = clone $fromDate;
$toDate->modify('+1 day'); // Have 2013-06-11 00:00:00
Run Code Online (Sandbox Code Playgroud)
并修改您的方法:
public function findExpensesForDate($user, $fromDate, $toDate)
{
$q = $this
->createQueryBuilder('e')
->where('e.date >= :fromDate')
->andWhere('e.date < :toDate')
->andWhere('e.user = :user')
->setParameter('fromDate', $fromDate)
->setParameter('toDate', $toDate)
->setParameter('user', $user)
->getQuery();
return $q->getResult();
}
Run Code Online (Sandbox Code Playgroud)
这就是全部,它应该工作,这里的脚本:
$expenses_for_today = $this->repository->findExpensesForDate($this->user, $fromDate, $toDate);
Run Code Online (Sandbox Code Playgroud)
因此,您将获得2013-06-10 00:00:00和2013-06-11 00:00:00(不包括)之间的所有日期,因此当天的结果!
| 归档时间: |
|
| 查看次数: |
7281 次 |
| 最近记录: |