我正在寻找一种定义自定义Eloquent方法的方法,该方法仅返回基于相应数据库表中的多个列的计算。我也尝试在模型属性中设置它,但似乎都不起作用。也许我错过了一些东西,这是我到目前为止所得到的:
<?php
use Illuminate\Database\Eloquent\Model;
class Team extends Model
{
public function difference() {
return $this->goals_f - $this->goals_a;
}
}
我收到的错误信息是:
Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation
答案 0 :(得分: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