Генерация динамических отношений в Laravel

Я использую nWidarts/laravel-modules пакет для расширения функциональности приложения. Для интеграции модулей Models с основным приложением требуется "приклеить" родительский объект к дочерним объектам модуля. Хитрость в том, что модуль не может добавить отношение к базовой модели, поэтому он должен извлекать отношение "динамически".

На данный момент я достигаю этого, используя следующее определение, которое я загружаю в конфиг модуля.

return [
    'client' => [
        'notes' => function ($self) {
            return $self->hasMany('Modules\Notes\Entities\Note');
        }
    ],

В основном, у нас есть одна вспомогательная функция в BaseModel, которая может автоматически разрешать отношения, используя следующие

<?php

public function __call($method, $params)
{
    $entity = strtolower(class_basename($this));
    if ($entity) {
        $configPath = "modules.relations.$entity.$method";
        if (config()->has($configPath)) {
            $function = config()->get($configPath);

            return $function($this);
        }
    }

    return parent::__call($method, $params);
}

Все это прекрасно работает, однако мы теряем возможность кэшировать конфигурацию из-за использования замыкания в файле конфигурации. Мне нужно провести рефакторинг файла конфигурации, чтобы передать обратно тип отношения (hasOne, hasMany и т. Д.) Вместе с FQN модели.

Мне нужны предложения, чтобы обойти эту проблему и включить кэширование конфигурации.

0 ответов

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