获取Laravel 4中的所有现有模型?

时间:2014-03-28 15:13:01

标签: php model laravel-4

有没有办法获取Laravel 4中的所有现有模型?文档没有说明这一点,谷歌搜索问题没有任何相关性。

我正在处理当前项目中的一项功能,该功能需要能够创建有关哪些资产或哪些客户已在公司购买哪种资产的报告。为此,我创建了一个模块,允许用户指定哪些信息在哪个工作表上(导出到Excel)。

我们说我有以下模型(它们都扩展了Eloquent):

  • 资产
  • 客户
  • 国家
  • 用户

我只希望资产和客户模型在报告中可用。我的想法是给那些常数并检查那个常数。

我唯一能碰到的是获取Laravel应用程序中定义的所有模型的方法。

我知道我可以遍历app / models目录或在某处创建一个数组,但我正在寻找一种更好的方法。有没有人碰巧知道如何实现这个目标?

1 个答案:

答案 0 :(得分:1)

经过一些研究,并在PHP聊天室询问,我提出了以下解决方案:

首先,我从/ app / models目录中检索所有模型,删除 .. ,然后修剪文件名和任何剩余空格的扩展名。
在我的情况下,这将起作用,因为我在类之后命名了文件。

private function getModels()
{
    return array_filter(scandir(app_path('models/')), function(&$val)
    {
        if($val != '.' && $val != '..')
        {
            $val = trim(str_replace('.php', '', $val));
            return class_exists($val);
        }
    });
}

现在我拥有了我想要的所有模型,我需要过滤哪些我想报告的模型。在我想要报告的模型上,我实现了一个名为IReportable的接口。我想使用一个抽象类,但由于PHP不允许多重继承,所以我使用了这种方法。

class MyModel extends Eloquent implements IReportable

或者就我而言:

Class Asset extends BaseModel implements IReportable

有了这个,我可以过滤模型。

private function getReportableModels()
{
    return array_filter($this->getModels(), function($model)
    {
        return in_array('IReportable', class_implements($model, false));
    });
}