MorphMap не работает в Laravel 5.6

Я использую полиморфные отношения в своих моделях, а с полиморфными отношениями я хочу использовать карту Moprph. Чтобы реализовать концепцию карты морфинга, я написал собственного поставщика услуг и зарегистрировал его в app.php. Все работает нормально, кроме карты морфинга. Morphmap не работает даже с AppServiceProvider. Пожалуйста, взгляните на мой код

Поставщик услуг

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()
    {
       //
    }
   }
"не работает" не является описанием проблемы. Почему нет? Что должно произойти? Что происходит вместо этого? Почему это плохо?
underscore_d 18.04.2018 12:02
laravel.com/docs/5.6/…, Отметьте раздел «Пользовательские полиморфные типы» в документе, они сказали нам использовать строчные буквы, но вы используете заглавные буквы, вам нужно использовать строчные буквы, такие как «первый», «второй». Попробуй может сработает.
MD Iyasin Arafat 18.04.2018 12:05

Это то, о чем я хочу спросить, поскольку я новичок в Laravel. Я выполнил все описанные шаги, чтобы использовать MorphMap. Но все же чего-то не хватает, поэтому он не работает.

aishazafar 18.04.2018 12:06

Кроме того, поделитесь своим кодом отношения модели в своем вопросе.

MD Iyasin Arafat 18.04.2018 12:08

В этом документе они нигде не упоминали использование строчных букв вместо заглавных букв. Но все же я выполнил вашу инструкцию, и она все еще не работает @ MD Лясин Арафат

aishazafar 18.04.2018 12:14

Не могли бы вы поделиться с нами кодом вашей модели взаимоотношений? Возможно, ваша проблема с другими вещами и с каким типом ваших проблем вы столкнулись, также поделятся вашими ошибками.

MD Iyasin Arafat 18.04.2018 12:27

Я разобрался в проблеме. Я использовал пути таких моделей, как «App \ FirstName», а не его классы, такие как FirstName :: Class. Но моя проблема еще не решена, так как она работает нормально, если я добавлю ее в AppServiceProvider, но она не работает в отдельном поставщике услуг. Хотя в моей модели проблем нет, но я тоже разделяю ее модель.

aishazafar 18.04.2018 12:42
Стоит ли изучать 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-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
7
2 294
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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: Конфигурация

Почему кеширование конфигурации не позволяет services.php обновляться

  1. проверьте bootstrap/cache/config.php, посмотрите, что там внутри. providers является частью конфигурации приложения
  2. проверить Illuminate\Foundation\Http\Kernel

    protected $ bootstrappers = [ \ Illuminate \ Foundation \ Bootstrap \ LoadEnvironmentVariables :: class, \ Illuminate \ Foundation \ Bootstrap \ LoadConfiguration :: класс, \ Illuminate \ Foundation \ Bootstrap \ HandleExceptions :: class, \ Illuminate \ Foundation \ Bootstrap \ RegisterFacades :: class, \ Illuminate \ Foundation \ Bootstrap \ RegisterProviders :: класс, \ Illuminate \ Foundation \ Bootstrap \ BootProviders :: класс, ];

  3. проверить Illuminate\Foundation\Bootstrap\LoadConfiguration
  4. проверьте Illuminate\Foundation\Application, registerConfiguredProviders

Наконец, я должен сказать, что я новичок в laravel. Если я допустил ошибку, дайте мне знать. Спасибо.

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