升级到livewire v3时,发现错误“No morph map Defined for model [App\Models\{model}].”

问题描述 投票:0回答:1

我有一个通过 Docker 运行的 Laravel 应用程序(Laravel 9.39.0 和 PHP 8.1.3),我正在尝试将 Livewire 从版本 2.10 升级到 3.0,但遇到了一个无法解决的问题。

要执行升级,我按照 https://livewire.laravel.com/docs/upgrading 中的说明进行操作,因此我运行:

sail composer require livewire/livewire "^3.0"

sail php artisan view:clear

sail php artisan livewire:upgrade

最后一个启动半自动代码审查过程,我始终回应“保留”(1)“是”。所有步骤均已完成,没有任何问题。完成后,我继续命名dispatch()的参数,从而完成升级过程。

我开始浏览应用程序的页面,但是当我尝试打开任何包含 Livewire 组件的 Laravel 视图时,

@livewire('authors.bios', ['author' => $author])

在 Livewire 2.10 中运行良好,但现在我遇到了这样的异常

“没有为模型 [App\Models\Author] 定义变形贴图。”

我到处搜索可能导致此错误的原因,但找不到任何线索,而且我不知道还能尝试什么。

有人可以帮助我吗?

PS。在这里你可以看到我的composer.json内容:

{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"require": {
    "php": "^8.1",
    "doctrine/dbal": "^3.5",
    "ezyang/htmlpurifier": "^4.16",
    "fideloper/proxy": "~4.4.1",
    "guzzlehttp/guzzle": "^7.2",
    "laravel/framework": "^9.2",
    "laravel/sanctum": "^2.14.1",
    "laravel/tinker": "^2.7",
    "laravel/ui": "^3.4",
    "livewire/livewire": "^3.0"
},
"require-dev": {
    "fakerphp/faker": "^1.9.1",
    "laravel/sail": "^1.0.1",
    "mockery/mockery": "^1.4.4",
    "nunomaduro/collision": "^6.1",
    "phpunit/phpunit": "^9.5.10",
    "spatie/laravel-ignition": "^1.0"
},
"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Database\\Factories\\": "database/factories/",
        "Database\\Seeders\\": "database/seeders/"
    },
    "files": [
        "app/helpers.php"
    ]
},
"autoload-dev": {
    "psr-4": {
        "Tests\\": "tests/"
    }
},
"scripts": {
    "post-autoload-dump": [
        "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
        "@php artisan package:discover --ansi"
    ],
    "post-update-cmd": [
        "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
    ],
    "post-root-package-install": [
        "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "@php artisan key:generate --ansi"
    ]
},
"extra": {
    "laravel": {
        "dont-discover": []
    }
},
"config": {
    "optimize-autoloader": true,
    "preferred-install": "dist",
    "sort-packages": true
},
"minimum-stability": "dev",
"prefer-stable": true

}

laravel upgrade laravel-livewire
1个回答
0
投票

当存在一些多态关系并且使用 Relation::enforceMorphMap()(通常在 AppServiceProvider::boot() 方法中)为其中一些关系设置别名时,通常会显示该错误。
使用 enforceMorphMap() 如果没有别名,所有多态关系也必须列出。
要解决此问题,您可以使用 Relation::morphMap() 而不是 Relation::enforceMorphMap()

必须检查升级过程是否设置了enforceMorphMap()

© www.soinside.com 2019 - 2024. All rights reserved.