Laravel 模型关系上的计算字段,如模型属性

Laravel computed field on the relation's of a model like a model attribute

我有 Flights 的模型。 Flightpayments_log有关系。

payments_log table 中有两个字段:amounttype(Input/Output or add/sub)

我想在 Flight 模型上添加一个字段,例如 Total_amount

Flight 模型上的 total_amount 将是根据 relationship 计算的字段。

type   amount
I       5.0
I       10.0
O       2

Total_amount = I+I-O = 13

最佳做法是什么?

在您的 Flight 模型上创建一个 accessor 方法,对日志 table:

中的 amount 列求和
public function getTotalAmountAttribute()
{
    // Sum log records of type I (add) 
    // and substract the sum of all log records of type ) (sub)
    return $this->paymentsLog()->where('type', 'I')->sum('amount') - $this->paymentsLog()->where('type', 'O')->sum('amount');
}

然后您可以使用以下方式访问它:

$flight->total_amount;