Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 每天自动更新实体_Symfony_Datetime_Events_Doctrine_Entity - Fatal编程技术网

Symfony 每天自动更新实体

Symfony 每天自动更新实体,symfony,datetime,events,doctrine,entity,Symfony,Datetime,Events,Doctrine,Entity,我正在用Symfony 3创建我的投资组合,我想用我的经验展示我的技能 我有一个带有“startAt”参数(type=datetime)和“exp”参数(string)的“Skill”实体 “exp”参数=“startAt”和当前日期之间的差值 我添加了一些生命周期回调,因此每次我接触“技能”实体时,“exp”参数都会更新,但我的问题是: 如何每天更新实体而不触摸它? 例如,现在我有一个“exp=6个月”,但下个月这个参数需要是“7个月”。创建一个命令来更新您的实体并用它创建一个cron选项卡创

我正在用Symfony 3创建我的投资组合,我想用我的经验展示我的技能

我有一个带有“startAt”参数(type=datetime)和“exp”参数(string)的“Skill”实体

“exp”参数=“startAt”和当前日期之间的差值

我添加了一些生命周期回调,因此每次我接触“技能”实体时,“exp”参数都会更新,但我的问题是:

如何每天更新实体而不触摸它?


例如,现在我有一个“exp=6个月”,但下个月这个参数需要是“7个月”。

创建一个命令来更新您的实体并用它创建一个cron选项卡

创建一个命令来更新您的实体并用它创建一个cron选项卡,因为“startAt”很可能映射到数据库中名为“start\u at”的字段名,此日期是您需要设置和存储的所有数据。实体中名为getExp()的方法映射到变量“exp”,然后取$this->startAt()值并计算该开始时间与当前时间之间的差值。根据您的偏好,您可以使用PHP DateTime对象以天、月或年为单位计算差异

此外,“exp”不需要是需要存储或映射到数据库的字段,因为它可以很容易地根据“startAt”日期值进行动态计算。

因为“startAt”可能映射到数据库中名为“start_at”的字段名,所以此日期就是需要设置和存储的所有数据。实体中名为getExp()的方法映射到变量“exp”,然后取$this->startAt()值并计算该开始时间与当前时间之间的差值。根据您的偏好,您可以使用PHP DateTime对象以天、月或年为单位计算差异


此外,“exp”不需要是需要存储或映射到数据库的字段,因为它可以根据“startAt”日期值轻松计算。

我不知道cron选项卡,我会看一看!我不知道cron标签,我来看看!这就是它现在的工作方式:我的实体中有方法get/setExp(),还有另一种方法“calcExp”和生命周期回调(PrePersist和PerUpdate)。该方法在“$this->getStartAt()”和“new\Datetime”之间执行“date\u diff”,然后我创建字符串“1年”、“2个月”、“1个月”…并在“exp”中设置字符串。该方法有效,但仅在“PreUpdate/PrePersist”中有效,即使我不接触实体,我也会使用它:/希望它足够清晰^^^@MickaelLeger你错过了这个答案的全部要点。您不需要在实体中存储
exp
,只需
startAt
。您当前的
getExp
方法可以只计算字符串并返回它,而不必将其保存到数据库中(也可以去掉
setExp
)。例如:
public function getExp(){return$this->getStartAt()->diff(new\DateTime(),true);}
不需要存储。好的,我明白你的意思:我删除了我的参数“exp”、方法“setExp”和“calcExp”,我只是把我的“calcExp”代码放在我的getExp中。我认为这是可行的,我会看看下个月的数据是否会更新,但它应该:)谢谢!这就是它现在的工作方式:我的实体中有方法get/setExp(),还有另一种方法“calcExp”和生命周期回调(PrePersist和PerUpdate)。该方法在“$this->getStartAt()”和“new\Datetime”之间执行“date\u diff”,然后我创建字符串“1年”、“2个月”、“1个月”…并在“exp”中设置字符串。该方法有效,但仅在“PreUpdate/PrePersist”中有效,即使我不接触实体,我也会使用它:/希望它足够清晰^^^@MickaelLeger你错过了这个答案的全部要点。您不需要在实体中存储
exp
,只需
startAt
。您当前的
getExp
方法可以只计算字符串并返回它,而不必将其保存到数据库中(也可以去掉
setExp
)。例如:
public function getExp(){return$this->getStartAt()->diff(new\DateTime(),true);}
不需要存储。好的,我明白你的意思:我删除了我的参数“exp”、方法“setExp”和“calcExp”,我只是把我的“calcExp”代码放在我的getExp中。我认为这是可行的,我会看看下个月的数据是否会更新,但它应该:)谢谢!