【问题标题】:Error: Call to a member function addDays() on string错误:调用字符串上的成员函数 addDays()
【发布时间】:2017-12-17 03:25:33
【问题描述】:

我想在指定日期添加天数。这是我的代码:

if (Carbon::now() <= $campaign->s_lastrun->addDays(28)) {
       $onAir = 1;
}

它一直有效,直到我对数据库进行了一些更改,现在我收到一个错误:Call to a member function addDays() on string,即使 s_lastrun 的列类型为 DATE。 有什么想法吗?

【问题讨论】:

  • 您对数据库做了哪些更改?
  • 你做了什么改变?
  • 如果s_lastrun 的类型为DATE,则该字段不会作为碳日期。您需要该字段的类型为timestamp。你可以先做一个Carbon::parse(),然后做需要做的事情。
  • 我忘记在模型的$dates 数组中包含s_lastrun...@aynber 的解决方案帮助了我。
  • 我本来打算去的,但它需要 4-5 分钟才能通过 :) thx!

标签: php laravel


【解决方案1】:

您需要告诉 Eloquent 这是一个日期,以便它将其转换为 Carbon。根据docs

默认情况下,Eloquent 会将 created_at 和 updated_at 列转换为 Carbon 的实例,它扩展了 PHP DateTime 类以提供各种有用的方法。您可以通过覆盖模型的 $dates 属性来自定义自动更改哪些日期,甚至完全禁用此更改。

所以在你的模型中,添加以下内容:

protected $dates = ['created_at', 'updated_at', 's_lastrun'];

如果您不使用默认时间戳,请删除 created_atupdated_at

【讨论】:

    【解决方案2】:

    由于addDays()不能应用于字符串变量,

    您必须像这样使用 Carbon 解析 $campaign-&gt;s_lastrun

    Carbon::parse($campaign->s_lastrun)
    

    然后像这样比较:

    if (Carbon::now() <= Carbon::parse($campaign->s_lastrun)->addDays(28)) {
       $onAir = 1;
    }
    

    【讨论】:

    • 或者使用lte()函数。
    猜你喜欢
    • 2017-05-22
    • 2019-06-20
    • 2022-11-10
    • 2017-03-24
    • 2019-02-11
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多