【发布时间】:2018-07-12 15:07:02
【问题描述】:
我有 3 个模型,Category、Description 和 Expense。
每个类别hasMany 描述和一个描述belongsTo 一个类别,每个描述hasMany 费用,每个费用belongsTo 一个描述。
现在我有一个简单的categories.index 页面来显示所有类别。但是对于显示的每个类别,我想显示该类别所有费用的总和。我有这样的hasManyThrough 关系:
类别模型:
public function expenses()
{
return $this->hasManyThrough(Expense::class, Description::class);
}
现在在我看来,我可以做到以下几点:
@foreach($categories as $category)
{{ $category->expenses()->sum('amount')
@endforeach
这是我的第一个问题。在我的控制器中,我渴望加载描述和费用:
$categories = auth()->user()->categories()
->with('descriptions')
->with('expenses')
->get());
这是否意味着我不会针对当前视图的设置方式创建额外的查询?我认为确实如此,这很糟糕,但我不确定,只是试图理解它。我的第二个问题是:
我尝试在我的类别模型中添加它,但它没有向我的类别对象添加任何内容:
protected $appends = ['expenses'];
public function getExpensesAttribute()
{
return $this->expenses()->sum('amount');
}
它只是显示了这个:
#attributes: array:7 [▼
"id" => 1
"user_id" => 1
"name" => "My Category"
"slug" => "my-category"
"created_at" => "2018-07-10 18:45:46"
"updated_at" => "2018-07-10 18:45:46"
]
我认为我用错了/不理解它。对此的任何解释都会有所帮助。
【问题讨论】: