首页 > 解决方案 > 我应该如何静态访问此方法?

问题描述

我有一个 Eloquent 模型 Person,它具有以下功能

public function findRecordByIdm($idm)
{
   $record =  Person::find($idm);
   return $record;
}

在一个单独的控制器 ProspectController 中,我想调用该函数来获取 $idm 返回的 Person 记录。如果我在没有声明它是静态方法的情况下这样做,我会得到一个

non static method should not be called statically

我知道由于他们的测试困难,我不应该简单地将方法声明为静态。相反,我应该如何让这个函数可以从 ProspectController 访问?

标签: phplaraveleloquent

解决方案


Find 不是 Model 上的方法,它实际上是 Builder 类上的实例方法。由于 , 的定义Model::__callStaticModel::find或任何其他不存在的方法)被传递给 Builder 类的新实例。这是您可以静态和非静态调用 find 的唯一原因,因为Model::find它实际上并不存在。

您可以使用模型的实例,就像 u_mulder 建议的那样,但这是我认为静态方法很好的一种情况。这遵循与工厂模式类似的设计,其中该静态方法的全部目的是准备和返回模型的实例。


推荐阅读