2016-05-23 142 views
2

我有2個型號,a ServiceInstances屬於ServiceTypes。服務類型決定了一些東西,它們之間的服務lengthLaravel範圍基於屬於關係

ServiceInstances我想實現這個「僞」的邏輯:

我需要得到$這個 - >的serviceType() - >長度,但關係方法失敗

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

任何想法?

+1

也許 '$這個 - > serviceType->長' - 沒有括號 – Yurich

+0

試過,但沒有成功 - 我得到的是另一個錯誤:'[ErrorException]未定義的屬性:十月\雨\數據庫\生成器:: $ serviceType' –

+1

**作用域應修改查詢而不執行它。**您可能希望在服務類型表上執行連接,並在SQL中執行長度比較而不是PHP。 – jfadich

回答

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)); 
} 
+0

試過沒有成功 - 我得到的是另一個錯誤:'[ErrorException]未定義的屬性:October \ Rain \ Database \ Builder :: $ serviceType' –

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'); 
}