使用Load方法上的Scope不起作用

时间:2018-06-13 07:47:58

标签: eloquent

有没有办法以类似于在with()上使用scopes的方式将此Closure抽象到我的MerchantUser模型?

到目前为止,我有这个有效:

$merchant_user->load(['permissions' => function ($query) use ($merchantId) {
    if ($merchantId) {
        $query->where('merchant_user_permission.merchant_id','=', $merchantId);
    }
}]);

但我想做这样的事情:

$merchant_user->loadPermissions($merchantId);

在我的模型中:

public function scopeLoadPermissions($query, $merchantId = null)
{
    return $query->load(['permissions' => function ($q) use ($merchantId) {
        if ($merchantId) {
            $q->where('merchant_user_permission.merchant_id','=', $merchantId);
        }
    }]);
}

目前只返回错误:

  

"方法Illuminate \ Database \ Query \ Builder :: load不存在。"

1 个答案:

答案 0 :(得分:1)

对于这种情况,您不需要添加范围。相反,如果您可以在模型中添加此功能

public function loadPermissions($merchantId = null)
{
    return $this->load(['permissions' => function ($q) use ($merchantId) {
        if ($merchantId) {
            $q->where('merchant_user_permission.merchant_id','=', $merchantId);
        }
    }]);
}

和用法

$merchant_user->loadPermissions($merchantId);