【问题标题】:InvalidArgumentException in Carbon.php line 425: Trailing dataCarbon.php 第 425 行中的 InvalidArgumentException:尾随数据
【发布时间】:2016-06-14 15:31:30
【问题描述】:

我最近刚从 MySQL 迁移到 PostgreSQL。 我注意到我一直收到此错误

InvalidArgumentException in Carbon.php line 425:
Trailing data

然后,我在我的应用程序中对Carbon:: 进行了全局搜索。我在 15 个文件中找到了 47 个匹配项。

如何在不修改所有这些文件的情况下修复此错误?


dd()我的对象这就是我得到的

Capture {#412 ▼
  #table: "captures"
  #connection: null
  #primaryKey: "id"
  #perPage: 15
  +incrementing: true
  +timestamps: true
  #attributes: array:6 [▼
    "id" => 65
    "type" => "cpe"
    "cpe_mac" => "000D6721A5EE"
    "device_mac" => null
    "created_at" => "2016-05-03 11:20:10-04"
    "updated_at" => "2016-05-03 11:20:10-04"
  ]

   ....

【问题讨论】:

  • 您从哪个版本的 MySQL 迁移而来?时间戳字段在不同的 MySQL 存储引擎中具有不同的存储值,并且将与 PostgreSQL 不同。消息来源:由于情况,我不得不从 MySQL 5.7 迁移到 MySQL 5.5,并且经历了同样的情况。事实证明,5.7 个时间戳也节省了毫秒数。

标签: php laravel laravel-5 php-carbon


【解决方案1】:

这正是你的想法。这里的问题是PostgreSQL 中的timestamp 列实际上需要不同的时间戳格式,其中包括末尾的miliseconds'Y-m-d H:i:s.u' 而不是 Carbon 的默认格式和 MySQL 的时间戳列,它只是 'Y-m-d H:i:s。为了解决这个问题,请告诉 PostgreSQL 您不想将时区作为字符串的一部分存储在您的 timestamp 列中:

ALTER TABLE {tablename} ALTER updated_at SET DATA TYPE timestamp(0) without time zone;

您需要对所有具有时间戳的表和所有列执行此操作。

【讨论】:

  • 如何更改我的整个数据库?我有大约10张桌子。请指教。
  • @ihue 一个一个地做。将它们保存为migrations 并在其中运行rawSQL,这样您在未来的任何环境中仍然可以只使用php artisan migrate
  • 我应该在 down() 中放什么? DB::statement('ALTER TABLE cloud-securities ALTER updated_at SET DATA TYPE timestamp(0) with time zone;'); ?
  • @ihue 是的。基本上。
【解决方案2】:

意识到这是一篇旧帖子,但我通过创建全局范围解决了这个问题。见:https://laravel.com/docs/5.6/eloquent#global-scopes

然后我做了:

$builder->addSelect(['select','cols','here',to_char(created_at,'YYYY-MM-DD HH24:MI:SS') as created_at"];

这意味着可以与 Laravel 一起使用。因为我只是从这个数据库中读取,所以不需要考虑更新时间戳。

【讨论】:

    【解决方案3】:

    因为这是一个 Carbon 错误,这是因为您可能需要以毫秒为单位的日期。

    "created_at" => "2018-04-19 07:01:19.929554"
    

    您可以将以下方法添加到您的(基本)模型中。

    public function getDateFormat()
    {
         return 'Y-m-d H:i:s.u';
    }
    

    如果你在 Postgres 中使用 TIME WITH TIMEZONE,那么格式应该是:

    Y-m-d H:i:s.uO
    

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 1970-01-01
      • 2020-04-08
      • 2014-08-01
      • 2015-06-10
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多