MorphMap在Laravel 5.6中不起作用

时间:2018-04-18 09:53:33

标签: laravel laravel-5.4 laravel-5.5 laravel-5.6

我在我的模型中使用多态关系,并且我希望使用Moprph映射的多态关系。为了实现变形映射的概念,我编写了自己的服务提供程序并在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()
    {
       //
    }
   }

1 个答案:

答案 0 :(得分:3)

我也遇到了这种情况。最后,我通过运行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. 的一部分
  3. 检查Illuminate\Foundation\Http\Kernel

    protected $ bootstrappers = [     \照亮\基金会\引导程序\ LoadEnvironmentVariables ::类,     \照亮\基金会\引导程序\ LoadConfiguration ::类,     \照亮\基金会\引导程序\ HandleExceptions ::类,     \照亮\基金会\引导程序\ RegisterFacades ::类,     \照亮\基金会\引导程序\ RegisterProviders ::类,     \照亮\基金会\引导程序\ BootProviders ::类, ];

  4. 检查Illuminate\Foundation\Bootstrap\LoadConfiguration
  5. 检查Illuminate\Foundation\ApplicationregisterConfiguredProviders
  6. 最后,我不得不说我对laravel很新。如果我犯了一些错误,请告诉我。谢谢。