Php 基于BelongsTo关系的Laravel范围
我有两个模型,一个是属于服务类型的Php 基于BelongsTo关系的Laravel范围,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我有两个模型,一个是属于服务类型的服务实例。服务类型决定了一些事情,其中包括服务长度 在ServiceInstances中,我试图实现这个“伪”逻辑: 我需要获取$this->serviceType()->长度,但关系方法失败 public function scopeExpired($query) { $length = $query->serviceType()->length; return $query->where('created_at', '<
服务实例。服务类型决定了一些事情,其中包括服务长度
在ServiceInstances
中,我试图实现这个“伪”逻辑:
我需要获取$this->serviceType()->长度,但关系方法失败
public function scopeExpired($query) {
$length = $query->serviceType()->length;
return $query->where('created_at', '<', Carbon::now()->subDays($length));
}
公共函数作用域已过期($query){
$length=$query->serviceType()->length;
return$query->where('created_at'),调用$query->serviceType()
返回关系对象,而$query->serviceType
返回模型本身。现在它检索一个模型,但当您有一个一个或多个关系时,它返回一个模型数组
正确的方法是调用不带括号的serviceType
,如下所示
public function scopeExpired($query) {
$length = $query->serviceType->length;
return $query->where('created_at', '<', Carbon::now()- >subDays($length));
}
公共函数作用域已过期($query){
$length=$query->serviceType->length;
return$query->where('created_at',”您不应该在范围内执行查询。您可以用纯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');
}
公共函数作用域已过期($query){
返回$query
->join('services','services.type_id','=','service_types.id'))
->whereRaw('TO_DAYS(created_at)
可能是“$this->serviceType->length”-没有括号,如果没有成功-我得到的只是另一个错误:[ErrorException]未定义的属性:Octory\Rain\Database\Builder::$serviceType
作用域应该修改查询而不是执行查询。您可能希望在服务类型表上执行联接,并使用SQL而不是PHP进行长度比较。尝试了但未成功-我得到的是另一个错误:[ErrorException]未定义的属性:十月\Rain\Database\Builder::$serviceType