'Laravel 8.x to 9.x upgrade requirements issue

How can I fix?

Your requirements could not be resolved to an installable set of packages.

  • illuminate/database[v6.0.0, ..., v6.19.1] require php ^7.2 -> your php version (8.1.2) does not satisfy that requirement.
  • illuminate/database[v7.0.0, ..., v7.28.4] require php ^7.2.5 -> your php version (8.1.2) does not satisfy that requirement.
  • illuminate/database[v8.0.0, ..., v8.11.2] require php ^7.3 -> your php version (8.1.2) does not satisfy that requirement.
  • Root composer.json requires spatie/laravel-permission ^4.2 -> satisfiable by spatie/laravel-permission[4.2.0, ..., v4.x-dev].
  • Conclusion: don't install laravel/framework v9.0.0-beta.2 (conflict analysis result)
  • Conclusion: don't install laravel/framework v9.0.0-beta.3 (conflict analysis result)
  • Conclusion: don't install laravel/framework v9.0.0-beta.4 (conflict analysis result)
  • Conclusion: don't install laravel/framework v9.0.0-beta.5 (conflict analysis result)
  • Conclusion: don't install laravel/framework v9.0.0 (conflict analysis result)
  • Conclusion: don't install laravel/framework v9.0.1 (conflict analysis result)
  • Conclusion: don't install laravel/framework v9.0.2 (conflict analysis result)
  • Conclusion: don't install laravel/framework v9.1.0 (conflict analysis result)
  • Conclusion: don't install laravel/framework v9.2.0 (conflict analysis result)
  • Conclusion: don't install laravel/framework v9.3.0 (conflict analysis result)
  • Conclusion: don't install laravel/framework v9.3.1 (conflict analysis result)
  • Conclusion: don't install laravel/framework v9.0.0-beta.1 (conflict analysis result)
  • spatie/laravel-permission[4.2.0, ..., v4.x-dev] require illuminate/database ^6.0|^7.0|^8.0 -> satisfiable by illuminate/database[v6.0.0, ..., 6.x-dev, v7. 0.0, ..., 7.x-dev, v8.0.0, ..., 8.x-dev].
  • Only one of these can be installed: illuminate/database[v6.0.0, ..., 6.x-dev, v7.0.0, ..., 7.x-dev, v8.0.0, ..., 8.x-dev], laravel/framework[v9.0.0-beta.1 , ..., 9.x-dev]. laravel/framework replaces illuminate/database and thus cannot coexist with it.
  • Root composer.json requires laravel/framework ^9.0 -> satisfiable by laravel/framework[v9.0.0-beta.1, ..., 9.x-dev].


Solution 1:[1]

Take backup of your old composer.json, just to refer for all the other packages that you are going to need.

Remove vendor folder and copy composer.json from below.

This is my fresh laravel 9 composer.json file

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "php": "^8.0.2",
        "guzzlehttp/guzzle": "^7.2",
        "laravel/framework": "^9.2",
        "laravel/sanctum": "^2.14.1",
        "laravel/tinker": "^2.7",
        "spatie/laravel-permission": "^5.5"
    },
    "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/"
        }
    },
    "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
}

Then run composer update After that if you want your old packages back then install one by one like this

composer require spatie/laravel-permission

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1