2016-01-20 69 views
1

我正在尋找一種方法來定義自定義Eloquent方法,該方法僅返回基於相應數據庫表中幾個列的計算。我也嘗試在模型屬性中設置它,但都不起作用。也許我失去了一些東西,這是我走到這一步:用於計算的雄辯模型方法或屬性

<?php 

use Illuminate\Database\Eloquent\Model; 

class Team extends Model 
{ 
    public function difference() { 
     return $this->goals_f - $this->goals_a; 
    } 
} 

我recieving的錯誤信息是:

Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation 
+0

請附上您的laravel版本!這是5.2嗎? –

+0

@OzanKurt我不認爲這個版本是這個問題。這取決於'$ this'在函數中的作用。如果它是一個Eloquent的查詢構建實例,它需要一個特定的返回類型(Relationship),但是如果'$ this'是'Team'的一個實例,這個函數應該可以正常工作。或者至少我很確定這是個問題。 –

+0

該錯誤已從Laravel 5.2中刪除。 :) –

回答

1

你的錯誤使得它聽起來像你對我試圖打電話你的方法像財產」 $team->difference你反而會需要調用它像:。$team->difference()如果你想獲得的區別,如果它是一個屬性,那麼你就需要定義一個訪問:

public function getDifferenceAttribute(){ 
    return $this->goals_f - $this->goals_a; 
} 

然後你可以把它叫做$team->difference

你也可以定義到模型中受保護的$appends屬性,以使差分特性是隨後在其可見的JSON表示:

protected $appends = ['difference']; 

的更多信息:https://laravel.com/docs/5.2/eloquent-mutators#accessors-and-mutators

+0

它可能不是Laravel 5.2,如果他使用5.2將不會有任何錯誤。 –

+0

訪問器技巧爲我解決了它,非常感謝! – user2968356