2012-05-18 120 views
0

在我的Symfony2應用程序中有一個名爲'Appointment'的實體。該實體具有稱爲「日期」的字段/屬性。它有一個格式,如:'2012-12-24'。以Symfony2格式指定日期範圍

我創建了一個名爲AppointmentType的表單,以便能夠根據其屬性搜索約會。該表單在AppointmentController中使用,並呈現給appointment.html.twig。

到目前爲止這麼好。我可以根據所有字段搜索約會。例如,我可以搜索特定的日期(即完全匹配)。

但是,我希望能夠搜索預約日期範圍(使用開始和結束日期)。問題將是:「給我所有這個和那個日期之間的約會。」我已經嘗試過很多東西,但無法在Symfony2中找到它。

一些隨機的想法在這裏:

  • 我應該建立在旁邊 「約會」的約會實體兩個額外的領域,稱之爲「開始日期」和「結束日期」,而不是將它們鏈接到 MySQL表,但只用它們進行搜索?
  • 我應該在表單中做些什麼,創建兩個鏈接到實體的相同日期屬性的日期字段(似乎會導致違規)?
  • 我不應該爲此使用Symfony2表單,而是使用舊的方式(手動編寫和處理表單)?這在目前是有效的,但在Symfony2環境中遠非優雅。

任何幫助是值得歡迎的。特別是(完整的)工作代碼示例會很棒,所以我可以研究它。

+0

採取部分看看尖[創建表單類(http://symfony.com/doc/current/book/forms.html#creating-form-classes) - 有提過'property_path'選項 – jkucharovic

+0

我認爲你是對的,jkucharovic!這一定是它。現在我可以在表單中指定兩個日期屬性,而不是將它們鏈接到對象。在我的控制器中,我使用這兩個日期來指定查詢範圍,如Lee Davis所示。非常感謝! –

+1

更簡單的解決方案是[Callback validator](http://symfony.com/doc/current/reference/constraints/Callback.html) – jkucharovic

回答

0
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(); 
} 
+0

謝謝Lee Davis。但你如何處理你的表單?如果您希望表單顯示兩個小工具,一個用於開始日期和一個用於結束日期,而實體只包含一個日期字段,那麼您如何實現此目的?一旦我有日期,我可以像你演示的那樣查詢。但如何生成表單?乾杯,保羅 –