php - App\Models\必须返回一个关系实例

标签 php laravel

我正在尝试根据数据库字段的值运行一些动态方法调用。一些背景:我有一个模型 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/

相关文章:

php - 从 mysql 存储的图像创建缩略图

javascript - 使用ajax和json将数组从php发送到js

php - xdebug在使用phalcon进行收集时中断

laravel - 如何使用模型类在 laravel 8 资源 Controller 中编辑、销毁和获取单个值?

Laravel 路由组问题(空白页)

php - 如何配置 Lumen 通过 Pusher 广播事件?

mysql - 我们如何使用 vue js 从数据库中检索产品数量?

php - 动态改变 CSS 背景图片

laravel - 在 Laravel 之外使用 Laravel Facade

php - 如何根据纬度和经度计算距离