2012-02-07 6 views
1

私はdateタイプであるpremiere_polandカラムをデータベーステーブルに持っています。Doctrine 2.1 - DateTimeの問題

/** @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

+0

すぐに 'var_dump($ object-> premier_poland)'を表示できますか? http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/basic-mapping.html –

+0

@クロージングに従って設定がすべて正しいように見えるので、ゲームの日付を格納する列が必要です初演と初演は完全には分からない(例えば2013年3月または唯一の年)。 @Mike Yeah、しかしデータベースに '2013-01-00'があれば、var_dumpは私に' string(10) "31.12.2012"を返します。それは間違っている; p。 –

答えて

3

@Crozin私はゲームを格納する列を必要とするので初演とデートし、初演は、完全に(例のための2013年3月または年だけを。)知られていないことができます。

私は2つの列(タイプ DateTime/ DATEの)日付の1と初演を表示する際に、日付(日、月、年)の部分が考慮されるべきであるかを示すであろうと別のものを作成することをお勧め

日付(タイプSETまたはビットマスク)。初演の日付が表示され

機能は、次のようになります。この機能は、エンティティオブジェクトwhitin置くべきではありませんもちろん

// "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'); 
    } 
} 

が - それはあまりにも複雑になるだろう(私たちは国際化とi10lを取る場合は特に)と関連していない。

このtechinqueでは、次の日付を表示させてください:

  • 2012年6月12日(12-06-2012Game::SHOW_DATE)、
  • 2015(01-01-2015Game::SHOW_YEAR)、
  • 2012年3月(01-03-2012Game::SHOW_MONTH) 、
  • 夏、2020年(01-06-2012Game::SHOW_SEASON)、冬季、2010年(01-12-2010Game::SHOW_SEASON
+0

アドバイスの人のためにありがとう、私はこれを行う:) –