考虑到我有三个模型:Subscription
,Description
和Expense
。
每个订阅都属于一个描述,每个描述都有很多费用:
模型订阅:
public function description()
{
return $this->belongsTo(Description::class);
}
型号说明:
public function expenses()
{
return $this->hasMany(Expense::class);
}
模型费用:
public function description()
{
return $this->belongsTo(Description::class);
}
我希望能够根据说明检索订阅的所有费用。当我有一个订阅时,可以执行以下操作:
$subscription->load(['description.expenses' => function ($q) use (&$transactions, $subscription) {
$transactions = $q->with('description')
->get());
}]);
但是,当我要检查所有订阅已完成的所有费用时,我不确定如何处理。我尝试使用hasManyThrough
,但是我认为这根本不起作用,因为我的Description
和我的Expense
都有一个subscription_id
。我也不想为Subscription
和Expense
建立直接关系。
任何指针如何获取所有订阅的所有费用?还是所有订阅的所有费用之和?
答案 0 :(得分:1)
您可以在Subscription
模型上附加一个属性:
<?php
class Subscription extends Model {
protected $appends = ['total_expenses'];
...
public function totalExpenses()
{
return $this->description()
->with(['expenses'])
->get()
->pluck('expenses.amount', 'amount')
->sum('amount');
}
}
// do something...
Subscription::all()->each->total_expenses
答案 1 :(得分:0)
我实际上可以做与已经发布的相同的事情:
Subscription::all()->load(['description.expenses' => function ($q) use (&$transactions) {
$transactions = $q->get();
}]);