【问题标题】:Laravel working with relations that arent relatedLaravel 处理不相关的关系
【发布时间】:2018-07-01 05:49:26
【问题描述】:

假设我有三个模型:SubscriptionDescriptionExpense

每个订阅都属于一个描述,并且每个描述都有很多费用:

模型订阅:

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,但我认为这根本行不通,因为我的DescriptionExpense 都有subscription_id。我也不想为SubscriptionExpense 建立直接关系。

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

【问题讨论】:

    标签: laravel relation


    【解决方案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
    

    【讨论】:

    • 谢谢,我从来没有真正使用过$appends 的东西,但我会调查一下。但是,以上内容对我不起作用,但我至少可以去了解$appends :)
    【解决方案2】:

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

    Subscription::all()->load(['description.expenses' => function ($q) use (&$transactions) {
        $transactions = $q->get();
    }]);
    

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 2017-03-19
      • 2017-03-05
      • 1970-01-01
      相关资源
      最近更新 更多