【问题标题】:Laravel 5.3 -> 5.4 Reflection ExceptionLaravel 5.3 -> 5.4 反射异常
【发布时间】:2018-04-15 02:23:25
【问题描述】:

我已经从 laravel 5.3 升级到 5.4。现在我得到 Reflection Exception Class eloquent.saving: App\model_name 不存在。 其他一切看起来和工作正常。我可以查询它、检索它、在 Vue 浏览器中显示它——只是保存部分非常糟糕。每个模型及其各自的控制器都会发生这种情况。

以最简单的模型为例:

型号

namespace App;
use Illuminate\Database\Eloquent\Model;

class Bank extends Model
{
  protected $guarded = ['id'];
}

控制器

namespace App\Http\Controllers;

use App;
use App\Bank;
use Illuminate\Http\Request;

class TestController extends Controller
{

  public function test1(Request $request) {

    /** @var \App\Bank $bank */
    // get record
    $bank = Bank::first();
    // change data
    $bank->bic = "xxx";
    // dump it - looks ok
    dump($bank);
    // this throws reflection error
    $bank->save();

  }
}

没有更改任何自定义代码。只是升级(并添加了升级指南 + 修补程序的适用更改)。我已经清除了缓存,清除了编译视图,完成了优化,转储自动加载……这些作品。 这是 laravel 5.5 的中间步骤。但是如果我直接升级到 5.5,也会发生同样的情况。 不知道从哪里开始寻找。

来自 cmets 的更新:

创建新对象会引发 Carbon 异常。在模型中设置 $timestamps = false 可以消除 Carbon 错误,我可以创建新模型并保存它。但是,如果我找到相同的记录并尝试保存它,我会再次收到反射异常。

更新

如果我降级回 5.3 ,一切都会立即开始工作。

【问题讨论】:

  • 你可以新建还是出现同样的错误?
  • 你的模型确定在 App 文件夹的根目录下吗? namespace App;
  • @kerrin 。是的,模型在正确的位置。关于第二条评论……我们正在取得进展。我实际上还没有尝试创建一个。如果它尝试做 new Bank() ,我得到 Carbon 错误: DateTime::__construct(): Failed to parse time string (

标签: php laravel-5.4 laravel-eloquent


【解决方案1】:

EventServiceProvider 中有一个监听“eloquent.saving”的事件 - 完全被遗忘了。在 5.4 中处理事件的方式发生了变化(通过 laracast Talinon)

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 2015-11-08
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 2017-08-16
    • 2017-03-24
    相关资源
    最近更新 更多