我有2个模型,ServiceInstances
属于ServiceTypes
。服务类型决定了一些事情,其中包括服务length
在ServiceInstances
我试图实现这个“伪”逻辑:
我需要获得$ this-> serviceType() - >长度,但关系方法失败
public function scopeExpired($query) {
$length = $query->serviceType()->length;
return $query->where('created_at', '<', Carbon::now()->subDays($length));
}
有什么想法吗?
答案 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));
}