首页 > 解决方案 > 在 Laravel 中将 Model 实例与它自己的 Class 相关联的好方法是什么?

问题描述

我确信这种事情有一个共同的模式,我正在努力寻找搜索词来寻找答案,所以如果这是一个骗局,请多多包涵。

我的应用程序中有一些类创建了存储在关系数据库中的非常标准的模型,例如;

// AtsType::name examples = 'XML', 'RSS', 'SOAP'

class AtsType extends Model
{
    public function ats_instances()
    {
        return $this->hasMany('App\AtsInstance');
    }

    public function import()
    {

    }
}

但是,我需要该import()方法执行的操作以某种方式调用基于实际模型实例的类/接口/合同/任何内容。所以像这样;

AtsTypeRss::import() AtsTypeXml::import() AtsTypeSoap::import()

我希望它们是独立的类,以便最终使用一些将为开发人员生成它们的工匠命令,以及数据迁移以将新模型名称创建到数据库中。

我只是不确定该怎么做。

标签: phplaravellaravel-5.6

解决方案


您可以尝试类似的方法(如此处所示,我已经搜索了如何在命名空间中使用变量:

class AtsType extends Model
{
    protected $import_method = 'MyMethod';

    public function ats_instances()
    {
        return $this->hasMany('App\AtsInstance');
    }

    public function import()
    {
        $string = $this->import_method;
        $class = '\\controller\\' . $string;
        $newObject = new $class();
    }
}

推荐阅读