基于BelongsTo关系的Laravel范围

时间:2016-05-23 21:02:33

标签: php laravel laravel-5 eloquent

我有2个模型,ServiceInstances属于ServiceTypes。服务类型决定了一些事情,其中​​包括服务length

ServiceInstances我试图实现这个“伪”逻辑:

我需要获得$ this-> serviceType() - >长度,但关系方法失败

public function scopeExpired($query) {
    $length = $query->serviceType()->length;
    return $query->where('created_at', '<', Carbon::now()->subDays($length));
}

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您不应该在范围内执行查询。您可以使用纯SQL完成相同的任务。试一试。

public function scopeExpired($query) {
    return $query
        ->join('services', 'services.type_id', '=', 'service_types.id')
        ->whereRaw('TO_DAYS(created_at) < DATE_SUB(NOW()) - service_types.length');
}

答案 1 :(得分:0)

调用$query->serviceType()返回关系对象,而$query->serviceType返回模型本身。现在它检索一个模型,但是当你有一个oneToMany或manyToMany关系时,它会返回一个模型数组。

正确执行您要执行的操作的方法是在不使用括号的情况下调用serviceType,如下所示。

public function scopeExpired($query) {
    $length = $query->serviceType->length;
    return $query->where('created_at', '<', Carbon::now()-    >subDays($length));
}