【问题标题】:MorphMap is not working in Laravel 5.6MorphMap 在 Laravel 5.6 中不起作用
【发布时间】:2018-09-28 12:18:59
【问题描述】:

我在我的模型中使用多态关系,而对于多态关系,我想使用 Moprph 映射。为了实现变形图的概念,我编写了自己的服务提供者并将其注册在 app.php 中。除了变形贴图外,一切正常。即使使用 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()
    {
       //
    }
   }

【问题讨论】:

  • "is not working" 不是问题描述。为什么不?应该发生什么?相反会发生什么?为什么这么糟糕?
  • laravel.com/docs/5.6/…,签入文档中的“自定义多态类型”部分,他们告诉我们使用小写字母,但是您使用大写字母,您需要使用小写字母,例如“第一”、“第二”。试试吧,也许它会起作用。
  • 这就是我想问的,因为我是 Laravel 的新手。我已经按照描述的所有步骤来使用 MorphMap。但是仍然缺少一些东西,这就是它不起作用的原因。
  • 另外,在您的问题中分享您的模型关系代码。
  • 在这个文档中,他们没有提到任何地方使用小写而不是大写字母。但是我仍然按照您的指示进行操作,但仍然无法正常工作@MD lyasin Arafat

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


【解决方案1】:

我也遇到过这种情况。最后我通过运行 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 还是很陌生。如果我犯了一些错误,请告诉我。谢谢。

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 1970-01-01
    • 2018-08-01
    • 2018-09-28
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2019-03-27
    相关资源
    最近更新 更多