首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拉勒维尔处理的关系不相关

拉勒维尔处理的关系不相关
EN

Stack Overflow用户
提问于 2018-07-01 05:49:26
回答 2查看 24关注 0票数 0

假设我有三种模型:SubscriptionDescriptionExpense

每个订阅belongsTo都有一个描述,每个描述hasMany开销:

模型订阅:

代码语言:javascript
复制
public function description()
{
    return $this->belongsTo(Description::class);
}

模型说明:

代码语言:javascript
复制
public function expenses()
{
    return $this->hasMany(Expense::class);
}

模型费用:

代码语言:javascript
复制
public function description()
{
    return $this->belongsTo(Description::class);
}

我想要能够检索所有的费用为一个订阅,根据描述。当我有一个单一的订阅,我可以这样做:

代码语言:javascript
复制
$subscription->load(['description.expenses' => function ($q) use (&$transactions, $subscription) {
    $transactions = $q->with('description')
        ->get());
}]);

但是当我想检查所有订阅的所有费用时,我不知道该如何做。我尝试过使用hasManyThrough,但我认为这是行不通的,因为我的DescriptionExpense都有subscription_id。我也不想为SubscriptionExpense建立一个直接的关系。

任何指针如何获取所有订阅的所有费用?或者更确切地说,所有订阅的所有费用之和?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-01 07:32:55

实际上,我可以做和我已经发布的一样的事情:

代码语言:javascript
复制
Subscription::all()->load(['description.expenses' => function ($q) use (&$transactions) {
    $transactions = $q->get();
}]);
票数 0
EN

Stack Overflow用户

发布于 2018-07-01 06:01:19

您可以在Subscription模型上附加一个属性:

代码语言:javascript
复制
<?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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51120750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档