我在数据库表中有date
类型的premiere_poland
列。
/** @Column(type="date", nullable=TRUE) */
protected $premiere_poland;
我的问题是,我想要存储日期,如2012-01-01
,2013-00-00
,2013-01-00
等,我想要那种类型的日期,但Doctrine每次在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();
发布于 2012-02-08 01:11:30
@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');
}
}
当然,这个函数不应该放在entity对象中--它太复杂了(特别是当我们考虑到i18n和i10l的时候),而且与实体“无关”。
这项技术可以让你显示以下日期:
12-06-2012
,Game::SHOW_DATE
),01-01-2015
,Game::SHOW_YEAR
),H115 2012年3月(d16,d17),H218H119 2020年夏季(d20,d21),2010年冬季(d22,Game::SHOW_SEASON
)
https://stackoverflow.com/questions/9179522
复制相似问题