Symfony 每天自动更新实体
我正在用Symfony 3创建我的投资组合,我想用我的经验展示我的技能 我有一个带有“startAt”参数(type=datetime)和“exp”参数(string)的“Skill”实体 “exp”参数=“startAt”和当前日期之间的差值 我添加了一些生命周期回调,因此每次我接触“技能”实体时,“exp”参数都会更新,但我的问题是: 如何每天更新实体而不触摸它?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选项卡创
例如,现在我有一个“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中。我认为这是可行的,我会看看下个月的数据是否会更新,但它应该:)谢谢!