假设我有三种模型:Subscription、Description和Expense。
每个订阅belongsTo都有一个描述,每个描述hasMany开销:
模型订阅:
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建立一个直接的关系。
任何指针如何获取所有订阅的所有费用?或者更确切地说,所有订阅的所有费用之和?
发布于 2018-07-01 07:32:55
实际上,我可以做和我已经发布的一样的事情:
Subscription::all()->load(['description.expenses' => function ($q) use (&$transactions) {
$transactions = $q->get();
}]);发布于 2018-07-01 06:01:19
您可以在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_expenseshttps://stackoverflow.com/questions/51120750
复制相似问题