【问题标题】:Laravel error "Declaration of model/model_name should be compatible with Illuminate\Database\Eloquent\Model"Laravel 错误“模型/模型名称的声明应与 Illuminate\Database\Eloquent\Model 兼容”
【发布时间】:2019-06-22 22:55:22
【问题描述】:

我面临一个关于 laravel 应用程序的奇怪问题。在我的生产服务器上更新作曲家后,我收到了这个错误。我的登录页面显示正常,当我输入凭据时,它显示此错误,凭据错误或正确,它总是显示相同的错误。

错误是

App\Models\User::update($a_data = NULL, $a_conditions = NULL) 的声明应该兼容 Illuminate\Database\Eloquent\Model::update(array $attributes = Array, array $options = Array )

我在互联网上搜索过,但一无所获。请帮忙。会很感激的。

【问题讨论】:

  • 您的用户模型中不能有update() 方法。 Laravel 已经在基础模型类中有一个并实现了一个接口。
  • 实际上我正在覆盖该方法。它工作正常。我认为在更新我的作曲家后会出现这个问题。
  • update 需要一个数组作为参数 try App\Models\User::update([$a_data => NULL, $a_conditions => NULL])
  • 不.. Mike 它抛出了一个语法错误。

标签: laravel authentication composer-php


【解决方案1】:

从父类重写方法时 - 方法的签名在参数及其类型方面必须完全相同

在父类中,$attributes$options 都设置为 array 类型,因此您还必须在您的类中设置它们的这种方式

namespace App\Models;

class User extends \Illuminate\Database\Eloquent\Model {
    ...
    public function update(array $attributes = [], array $options = []) {
       // ... your implementation
       return parent::update($attributes, $options);
    }
    ...
}

【讨论】:

  • 感谢 Yaron 的回复。只想问是不是因为最新版本?因为它工作正常。现在由于这个变化,我需要像你在我的所有模型中提到的那样更改我的代码。
  • 你用的是什么版本?你的composer.jsonlaravel/framework 的版本是什么。好像没什么新意
  • 像你现在提到的那样更新用户模型后,它向我显示了另一个错误“App\Models\General::increment($s_table = NULL, $a_condition = Array, $s_column = NULL) 的声明应该是兼容 Illuminate\Database\Eloquent\Model::increment($column, $amount = 1, array $extra = Array) " 现在它显示错误是我的增量函数之一。
  • 感谢迈克的帮助。我确实更改了 2 或 3 个功能。现在我的应用程序恢复工作了。非常感谢。
猜你喜欢
  • 2013-08-04
  • 2019-11-16
  • 2014-05-09
  • 2021-04-20
  • 1970-01-01
  • 2018-10-22
  • 2017-09-02
  • 2019-02-13
  • 2017-12-17
相关资源
最近更新 更多