MorphMap 在 Laravel 5.6 中不工作

MorphMap is not working in Laravel 5.6

我在我的模型中使用多态关系,对于多态关系,我想使用 Moprph 映射。为了实现 morph map 的概念,我编写了自己的服务提供者并在 app.php 中注册了它。除 Morph 贴图外,一切正常。即使使用 AppServiceProvider,Morphmap 也无法正常工作。请看看我的代码

服务提供商

namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Database\Eloquent\Relations\Relation;

class MorphServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap services.
   *
   * @return void
   */
   public function boot()
   {
      Relation::morphMap([
        'First' => FirstModel::class,
        'Second' => SecondModel::class,
        'Third' => ThirdModel::class
      ]);
     }

    /**
     * Register services.
     *
     * @return void
     */
     public function register()
    {
       //
    }
   }

我运行也遇到这种情况。最后我通过 运行 artisan 命令解决了这个问题:

php artisan cache:clear

MorphMap 不工作的原因

未加载新的自定义服务。检查bootstrap/cache/services.php以查看新的ServiceProvider是否在providers

的数组中
<?php return array (
  'providers' => 
   array (
    0 => 'Illuminate\Auth\AuthServiceProvider',
    1 => 'Illuminate\Broadcasting\BroadcastServiceProvider',
    2 => 'Illuminate\Bus\BusServiceProvider',
    3 => 'Illuminate\Cache\CacheServiceProvider',
    4 => 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider',
    5 => 'Illuminate\Cookie\CookieServiceProvider',
    6 => 'Illuminate\Database\DatabaseServiceProvider',
    7 => 'Illuminate\Encryption\EncryptionServiceProvider',
    8 => 'Illuminate\Filesystem\FilesystemServiceProvider',
    //...

默认情况下,此文件应在 app.php 更改后自动更新。

在我的情况下,我不小心 运行 之前的命令 php artisan config:cache。这会阻止 services.php 更新。进一步参考:

Laravel Doc: Configuration

为什么缓存配置会阻止 services.php 更新

  1. 检查 bootstrap/cache/config.php,看看里面有什么。 providers 是应用程序配置的一部分
  2. 检查Illuminate\Foundation\Http\Kernel

    受保护的 $bootstrappers = [ \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class, \Illuminate\Foundation\Bootstrap\LoadConfiguration::class, \Illuminate\Foundation\Bootstrap\HandleExceptions::class, \Illuminate\Foundation\Bootstrap\RegisterFacades::class, \Illuminate\Foundation\Bootstrap\RegisterProviders::class, \Illuminate\Foundation\Bootstrap\BootProviders::class, ];

  3. 检查Illuminate\Foundation\Bootstrap\LoadConfiguration
  4. 检查Illuminate\Foundation\ApplicationregisterConfiguredProviders

最后,我不得不说我对laravel很陌生。如果我犯了一些错误,请告诉我。谢谢。