Генерация динамических отношений в Laravel - PullRequest
0 голосов
/ 15 декабря 2018

Я использую пакет 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 и т. Д.) Вместе с полным именем модели.

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

...