2012-02-07 23 views
1

我有premiere_poland列在數據庫表中是date類型。主義2.1 - 日期時間問題

/** @Column(type="date", nullable=TRUE) */ 
    protected $premiere_poland; 

我的問題是,我想存儲日期像2012-01-012013-00-002013-01-00等等,我想這種類型的日期,但教義每次返回列數據中DateTime實例和真實的形式改變(例如,2013-01-00 = 31.12.2012)。

我該如何讓Doctrine以字符串形式返回此值,而不是DateTime類實例。

我的查詢:

$q = "SELECT 
      g, 
      p.name AS platform_name, p.name_short AS platform_name_short, p.id AS platform_id, 
      s.premiere_poland, s.premiere_world 
      FROM Game g 
      JOIN g.genres ge 
      JOIN g.platform p 
      LEFT JOIN g.specification s 
      WHERE g.id = :id"; 
    $results = $db->createQuery($q)->setParameter('id', $_GET['id'])->getResult(); 
+0

'2013-01-00'是不是有效日期,因此PHP的'DateTime'對象和MySQL的'DATE'類型應該「鑄」成合法的。無論如何,你爲什麼要存儲這樣一個奇怪的東西? – Crozin 2012-02-07 16:05:49

+0

你可以顯示一個快速的'var_dump($ object-> premier_poland)'?根據http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/basic-mapping.html – 2012-02-07 16:08:22

+0

@Crozin因爲我需要存儲遊戲日期列在你的安裝一切看起來都正確首映式和首映式可能不完全知道(例如2013年3月或僅一年)。 @Mike是的,但如果我有'2013-01-00'在數據庫中的var_dump將返回我'串(10)「2012年12月31日」'。這是錯的; p。 – 2012-02-07 16:20:37

回答

3

@Crozin因爲我需要存儲遊戲首演日期和首映能夠充分地不知道(爲前2013年3月或一年只)列。

我建議創建兩列,一爲(類型DateTime/DATE的)日期,另外一個將指示顯示首映時,什麼日期(日,月,年)的部分應予以考慮日期(類型SET或位掩碼)。

函數,它顯示首播日期看起來是這樣的:

// "parts" is a name of the last column - it should be renamed into something 
// more adequate. Names of constants also aren't well adequate 

function getFormattedPremiereDate() { 
    if ($this->abc & Game::SHOW_YEAR_ONLY) { 
     return $this->premierePoland->format('%y'); 
    } 

    if ($this->abc & Game::SHOW_YEAR_AND_MONTH_ONLY) { 
     return $this->premierePoland->format('%m %y'); 
    } 

    if ($this->abc & Game::SHOW_DATE) { 
     return $this->premierePoland->format('%d %m %y'); 
    } 
} 

當然這個功能不應該放在whitin一個實體對象 - 這將會是太複雜(特別是如果我們把國際化和i10l考慮到)以及與實體「無關」。

這techinque應該讓你顯示日期如下:

  • 2012年6月12日(12-06-2012Game::SHOW_DATE
  • 2015年(01-01-2015Game::SHOW_YEAR
  • 2012年3月(01-03-2012Game::SHOW_MONTH) ,
  • Summer,2020(01-06-2012Game::SHOW_SEASON),Winter,2010(01-12-2010Game::SHOW_SEASON
+0

謝謝你的建議的人,我會是這樣做的:) – 2012-02-07 17:18:04