我正在尝试根据数据库字段的值运行一些动态方法调用。一些背景:我有一个模型 Anniversary
我想在接下来的 x 天内显示所有即将到来的周年纪念日。周年纪念日有date
和一个 frequency
.例如,每月、每季度等。根据频率,我想检查每个周年纪念日是否即将到来。
到目前为止,这是我的代码:
$anniversaries = auth()->user()->anniversaries()->get();
$test = $anniversaries->filter(function ($anniversary) {
$method = Str::of($anniversary->frequency)->camel();
return ${$anniversary->$method}() == true;
});
dd($test);
以上工作,当在实际方法中我dd()
某物。但是当返回 true 或 false 时,我收到错误:App\Models\Anniversary::monthly must return a relationship instance
在我的模型中,我只有以下几种方法用于测试:public function monthly()
{
return true;
}
public function quarterly()
{
return false;
}
我唯一的问题是,我想了解为什么我会收到这个错误,当然还有任何指向正确方向的指针来获得我想要的工作。谢谢!
最佳答案
以下行创建一个 Illuminate\Support\Str
对象而不是字符串。这会导致 Method name must be a string
错误。
$method = Str::of($anniversary->frequency)->camel();
您可以通过手动将其转换为字符串并直接调用来解决此问题:$test = $anniversaries->filter(function ($anniversary) {
$method = (string) (Str::of($anniversary->frequency)->camel());
return $anniversary->$method() == true;
});
关于php - App\Models\必须返回一个关系实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69305458/