Laravel 5.3迁移

时间:2017-01-23 07:03:23

标签: laravel-5

我只是升级到Laravel到5.x并使用"jenssegers/Date": "^3.0"

因此,在迁移时,似乎存在错误:

  

[ErrorException]声明   Jenssegers \ Date \ Date :: diffForHumans(Carbon \ Carbon $ since = NULL,   $ absolute = false)应该兼容   Carbon \ Carbon :: diffForHumans(Carbon \ Carbon $ other = NULL,$ absolute =   false,$ short = false)

请建议可以采取哪些措施来解决问题。

2 个答案:

答案 0 :(得分:1)

实际上你的问题在于这个包jenssegers/date。如您所见Jenssegers\Date扩展碳和第104行

public function diffForHumans(Carbon $since = null, $absolute = false, $short = false)

与Carbon有不同的实现

public function diffForHumans(Carbon $other = null, $absolute = false)

解决此问题的方法是在任一类上重新定义该方法,这是不推荐的,因为它们都在Vendor文件夹中。所以我猜您的选择是在jassegers/date上打开问题,或者尝试不使用该软件包(如果您不使用它,请编写自己的替代品。)

如果您在项目Composer.json中没有此软件包,问题可能会更加困难,但您使用的其他软件包具有jassegers/date作为依赖项。您可以在每个项目依赖项的Composer.json中的Vendor中进行检查。在这种情况下,您可以考虑使用与使用jassegers/date作为依赖项的包不同的包,至少在更新之前。

也许有人有更好的建议,这只是我的头脑......

P.S。记住..如果你直接在Composer.json中使用它,你也可以分叉jassegers/date,并自己更改方法实现并使用分叉版本,直到修复真正的版本。如果您间接使用它(您使用的其他一些包将此作为依赖项),那将会更复杂一些,这意味着您必须将包一直向下,直到到达jassegers/date。这将是相当繁琐的工作,但应该暂时解决问题。

答案 1 :(得分:0)

如果您比较current Carbon source code

public function diffForHumans(Carbon $other = null, $absolute = false, $short = false)

current jenssegers/Date source code

public function diffForHumans(Carbon $since = null, $absolute = false, $short = false)
你知道应该没有任何问题。看起来你使用的是新的Carbon而不是jenssegers / Date,而且版本不兼容。您需要更新您的jenssegers / Date。

3.2.8 seems to be the latest release,我会去那里测试。 3.2.3 seems to be the first version including the third parameterthis commit

  

Carbon \ Carbon :: diffForHumans(Carbon \ Carbon $ other = NULL,$ absolute =   false,$ short = false)有一个新的第三个参数,缺少它   Jenssegers \ Date \ Date :: diffForHumans打得不好。

所以你的版本至少应该是那个。