При обновлении до livewire v3 обнаруживается ошибка «Для модели [App\Models\{model}] не определена карта морфинга»

У меня есть приложение Laravel (Laravel 9.39.0 и PHP 8.1.3) через Docker, для которого я пытаюсь обновить 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) и «да». Все этапы выполняются без каких-либо проблем. Закончив, я приступаю к присвоению имен параметрам диспетчеризации(), тем самым завершая процесс обновления.

Я начинаю перемещаться по страницам приложения, но как только я пытаюсь открыть любое представление Laravel, содержащее, например, компонент Livewire,

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

который работал нормально с Livewire 2.10, теперь я столкнулся с таким исключением

«Для модели [App\Models\Author] не определена карта морфинга».

Я везде искал, что может быть причиной этой ошибки, но не нашел никаких подсказок и не знаю, что еще попробовать.

Кто-нибудь может мне помочь, пожалуйста!

ПС. Здесь вы можете увидеть мой контент композитора.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

}

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
154
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка обычно отображается, когда существуют некоторые полиморфные отношения и для некоторых из них установлен псевдоним с помощью Relation::enforceMorphMap(), обычно в методе AppServiceProvider::boot().
Используя EnforceMorphMap(), необходимо перечислить все полиморфные отношения, даже если у них нет псевдонима.
Чтобы обойти эту проблему, вы можете использовать Relation::morphMap() вместо Relation::enforceMorphMap().

Вы должны проверить, установил ли процесс обновления EnforceMorphMap()

Другие вопросы по теме