【问题标题】:Specifying a date range in a Symfony2 form在 Symfony2 表单中指定日期范围
【发布时间】:2012-05-18 09:02:17
【问题描述】:

在我的 Symfony2 应用程序中有一个名为“Appointment”的实体。该实体有一个名为“日期”的字段/属性。它的格式类似于:'2012-12-24'。

我创建了一个名为 AppointmentType 的表单,以便能够根据约会的属性搜索约会。该表单在 AppointmentController 中使用,并呈现到 Appointment.html.twig。

到目前为止一切顺利。我可以根据所有字段搜索约会。例如,我可以搜索特定日期(即完全匹配)。

但是,我希望能够搜索给定日期范围的约会(使用开始和结束日期)。问题是:“给我这个日期和那个日期之间的所有约会。”我尝试了很多东西,但在 Symfony2 中无法解决。

这里有一些随机的想法:

  • 我是否应该在旁边的约会实体中创建两个额外的字段 “日期”,称它们为“开始日期”和“结束日期”,而不是将它们链接到 MySql 表但仅用于搜索?
  • 我应该在表单中做些什么,创建两个链接到实体的相同日期属性的日期字段(似乎会导致违规)?
  • 我是否应该为此不使用 Symfony2 表单,而是使用老式方式(手动编写和处理表单)?这目前可行,但在 Symfony2 环境中远非优雅。

欢迎任何帮助。特别是一个(完整的)工作代码示例会很棒,所以我可以研究它。

【问题讨论】:

  • 查看Creating form classes 部分中的提示 - 提到了property_path 选项
  • 我认为你是对的,jkucharovic!一定是这个。现在我可以在我的表单中指定两个日期属性,而不是将它们链接到对象。在我的控制器中,我使用这两个日期来指定要查询的范围,如下面的 Lee Davis 所示。非常感谢!
  • 更简单的解决方案是Callback validator

标签: forms symfony doctrine-orm date-range


【解决方案1】:
public function getAppointmentsByDate($startDate, $endDate)
{
   $query = $em->createQuery('SELECT a FROM Appointment a WHERE a.date BETWEEN ?1 AND ?2');
   $query->setParameter(1, $startDate);
   $query->setParameter(2, $endDate);
   return $query->getResult();
}

【讨论】:

  • 感谢李戴维斯。但是你用你的表格做什么?如果您希望您的表单显示两个小部件,一个用于开始日期,一个用于结束日期,而实体仅包含一个日期字段,您如何实现这一点?一旦我有了日期,我就可以按照你的演示进行查询。但是如何生成表格呢?干杯,保罗
猜你喜欢
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多