我有两个表:步骤和流程。
relative_time
(字符串)列。active_on
(可为空,时间戳)列。步骤relative_time
存储relative formats,其值类似于:“ + 1年”,“ + 2天”,“ + 30天”等。
流active_on
是在用户激活流时设置的,它看起来像是“ 2017-12-30 00:00:00”。
每次我想知道 flow 何时到期时,我都从数据库中选择它,然后在PHP(Laravel,Carbon)中执行:
/**
* @return null|Carbon
*/
public function getExpiresAtAttribute()
{
if (!$this->active_on) {
return null;
}
// Access the relative time for step (for example: "+3 days").
$relativeTime = $this->step->relative_time;
// Adds the limit time to the activation date,
// turning it possible to check when the current flow
// will "expires".
return $this->active_on->modify($relativeTime);
}
问题
很容易检查PHP中的值是否到期。问题是,现在我只需要直接从数据库中选择仅“过期”的流,而我不知道使用这种方法是否可行。我该如何实现?
答案 0 :(得分:2)
您可以在relative_time中存储天数,而不是php日期间隔。这样您可以查询:
foreach (Steps::all() as $step) {
$step->update([
'relative_time' => strtotime($step->relative_time,0)/(3600*24);
]);
}
这样,您将使所有流都过期。
实际上不需要更改数据库结构。您可以创建一个迁移,以将relative_time从dateinterval转换为天数(是一个字符串字段)。
/**
* @return null|Carbon
*/
public function getExpiresAtAttribute()
{
if (!$this->active_on) {
return null;
}
// Access the relative time for step (for example: "+3 days").
$relativeTime = $this->step->relative_time;
// Adds the limit time to the activation date,
// turning it possible to check when the current flow
// will "expires".
return $this->active_on->modify("+$relativeTime days");
}
然后您可以调整getExpiresAtAttribute:
script.inline: true
script.indexed: true
script.update: true
script.mapping: true
script.engine.groovy.file.aggs: true
script.engine.groovy.file.mapping: true
script.engine.groovy.file.search: true
script.engine.groovy.file.update: true
script.engine.groovy.file.plugin: true
script.engine.groovy.indexed.aggs: true
script.engine.groovy.indexed.mapping: true
script.engine.groovy.indexed.search: true
script.engine.groovy.indexed.update: true
script.engine.groovy.indexed.plugin: true
script.engine.groovy.inline.aggs: true
script.engine.groovy.inline.mapping: true
script.engine.groovy.inline.search: true
script.engine.groovy.inline.update: true
script.engine.groovy.inline.plugin: true