当前位置: 首页 > 知识库问答 >
问题:

Laravel日期突变器需要解析?

施阳曜
2023-03-14

默认情况下,Eloquent会将创建的和更新的列转换为Carbon实例。检索$dates属性中列出的属性时,它们将自动转换为Carbon实例,允许您对属性使用Carbon的任何方法。

我有以下日期属性-我还没有包括created_at和updated_at列,因为这些是按照上面的默认转换:

protected $dates = ['deleted_at']; 

然后,我在模型上有以下访问器:

public function getCreatedAtAttribute($datetime)
{
    return $datetime->timezone('Europe/London');
}

但是,上述操作会引发以下错误:

Call to a member function timezone() on string

如果我将该方法更改为以下方法,它将起作用:

 public function getCreatedAtAttribute($datetime)
{
    return Carbon::parse($datetime)->timezone('Europe/London');
}

问题是为什么我需要解析它,因为当它根据文档https://laravel.com/docs/6.x/eloquent-mutators#date-mutators检索时,它假设将其转换为碳实例?

共有2个答案

宿鹏程
2023-03-14

如果您查看源代码(此处),您将看到访问器的优先级高于日期强制转换。

如果Eloquent找到日期属性的访问器(GetCreateDataAttribute),则日期转换将被忽略。因此,您需要在访问器中手动强制转换它。

徐秋月
2023-03-14

这完全取决于$datetime是什么以及如何传递这个函数。它显然是一个字符串,而不是一个Carbon实例,但是您的问题中没有包含$datetime的定义,所以我只能推测。

话虽如此,我还没有看到使用外部变量的变体,因为它们通常被设计为通过$this访问您应用它们的类的属性:

public function getCreatedAtAttribute(){
  return $this->created_at->timezone('Europe/London');
}

我能看到的唯一警告是在尝试使用$model时出现命名冲突-

 类似资料:
  • 我在log4j2中定义了一个RollingFile追加器 但是,当我尝试运行此命令时,我得到一个错误 IllegalStateException:模式在组织中不包含日期。阿帕奇。登录中。log4j。果心阿佩德。滚动的。图形处理器。getNExtTime(PatternProcessor.java:91) 当我在filePattern中放入日期模式时,这种情况就消失了,例如,。但是我不希望日志名称中

  • 问题内容: 我希望得到一些帮助,以帮助我编写一些自己编写的SQL语句。 我有一张数据表: 我需要获得以下信息: 换句话说,按日期划分日期范围。在SQL中甚至可能吗? 我的数据库是Oracle 11G R2,由于某些情况,我担心不能使用PL / SQL。 问题答案: 可以在SQL中执行此操作。有两个技巧。首先是生成一系列数字,您可以使用进行CTE处理。 第二个是将正确的逻辑放在一起以扩展日期,同时保

  • 问题内容: 我的任务是在每次日期更改时(每12am)触发一种刷新或重置我的应用程序的方法。我试图在网上搜索答案,但找不到任何东西。我可以使用Android中的任何方法/或侦听器吗?或任何方法?有什么建议吗? 问题答案: 是的,您可以在Android上收听日期/时间更改。为此,请在您的Activity中显式注册以下意图过滤器的BroadcastReceiver: 此意图每分钟发送一次。您 不能通过

  • 问题内容: 我正在使用Joda解析日期,并且具有不使用前导零的格式,例如: 请注意,dayOfMonth字段用空白填充左。 目前,我似乎不得不使用两种不同的格式,如果其中一种失败,则需要重新解析 是否有可以同时处理两种情况的单一格式(或API开关)?(SimpleDateFormat的答案是否相同-我不使用?) 问题答案: 我刚刚创建了一个快速程序来检查这一点- 输出是- 因此,即使source2

  • 问题内容: 在什么条件下我需要用Java解析日期时间字符串? 语言环境与时区有什么关系? 有时我会在“问题与解答”中看到需要解析语言的地方。但是在其他语言中,没有提及语言环境。 问题答案: 就日期时间处理而言,语言环境和时区是相互独立的正交问题。 区域设置 语言 人类语言,例如阿拉伯语,法语,波斯语。星期几名称,月份名称和序号指示符的文本。例如……是还是? 文化 通常使用成语来安排组成日期时间值的

  • 问题内容: 我正在寻找一个Java库,该库可以将字符串解析为POJO,而无需指定格式。我研究了POjava。还有其他类似的图书馆吗? 我发现以下具有相同问题的Java链接智能日期/时间解析器,但不是非常有用的答案。Joda或JChronic都不满足我的要求。如果我错了,请纠正我。 更新: 我说Joda不能解决我的目的的原因是,Joda希望将字符串解析为ISO8601格式或您指定的任何格式(例如“