在Laravel中生成动态关系

时间:2018-12-15 06:22:34

标签: php laravel module eloquent laravel-orm

我正在使用nWidarts/laravel-modules软件包来扩展应用程序中的某些功能。要将模块与核心应用程序集成在一起,需要将父实体“粘合”到模块子实体。这里的技巧是模块无法向核心模型添加关系,因此必须“动态”检索该关系。

目前,我使用以下定义实现此目标,并将其加载到模块配置中。

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 个答案:

没有答案