当前位置 : 首页 » 互动问答 » 正文

在我的雄辩对象中设置一个热切的加载函数

分类 : 互动问答 | 发布时间 : 2016-02-01 11:31:21 | 评论 : 2 | 浏览 : 29 | 喜欢 : 0

为了避免重复的代码,我想在我的雄辩模型中创建一个函数eagerLoading()。这是我的代码:

Model Product:

 public function scopeActive($ query)
{
    返回$ query-> where('active',1);
}

公共职能eagerLoading($查询)
{
    返回$ query-> with([
        '拥有者',
        “属性”,
        'prices'=>函数($ query)
        {
            $ query-> orderBy('created_at','desc');
            $查询 - >不同的( '类型');
        }
    ]);
}

MyController :

 $ products = Product :: active() - > eagerLoading() - > paginate(100);
返回$ this-> response-> withPaginator($ products,$ this-> productTransformer);

但是当使用这个时,我有这个错误:调用未定义的方法Illuminate \ Database \ Query \ Builder :: eagerLoading().

应该如何使用我的函数?

回答(2)

  • 1楼
  • 从文档:
    “要定义一个范围,只需在范围内添加一个Eloquent模型方法即可。”

    检查文档: https://laravel.com/docs/5.1/eloquent#query-scopes

    因此,您需要public function egerLoading($ query)

    Change public function scopeEagerLoading($ query) to be public function scopeEagerLoading($query)

  • 2楼
  • Your eagerLoading()方法只是另一个范围,就像你的 scopeActive()方法。为了做你想做的事,你需要将它重命名为 scopeEagerLoading().

    Right now, Product :: active()返回一个Eloquent查询生成器。然后你试图对此调用 eagerLoading(),并且该方法不存在。通过在scope前面添加方法,它会通知查询构建器调用它所查询的Model的方法。

相关阅读: