laravel如何处理表中的多值属性?

时间:2019-04-25 10:45:15

标签: laravel eloquent multivalue

我意识到我的“贷款”表上的“ interest_amount”是多值属性。所以我应该只创建一个表来拆分“贷款”表还是应该创建一个不同的模型?我需要不同的“利息”表,因为我必须将每个月的利息标记为已付/未付。

我创建了一个新模型“ InterestAmount”和表“ interest_amounts”,一旦插入“贷款”,该表必须自动插入。

Loan('id','amount','interest_rate')
InterestAmounts('id','loan_id','interest_amount')

这里,interest_amount是使用'amount'和 '利益'。并且表interestamount中的数据必须自动插入。

我需要使用事件和侦听器进行自动输入吗?

1 个答案:

答案 0 :(得分:1)

在Laravel中,这可以通过使用一对多关系来解决。在这里,您的一笔贷款有多个InterestAmounts。

因此,您必须定义两个模型

一个是Loan模型:

class Loan extends Model
{
  protected $table = 'Loan';

  public function interestAmounts()
  {
    return $this->hasMany(InterestAmount::class, 'loan_id');
  }
}

另一个是InterestAmount模型:

class InterestAmount extends()
{
  protected $table = 'InterestAmounts';

  public function loan()
  {
    return $this->belongsTo(Loan::class, 'loan_id');
  }
}

现在,如果要在插入贷款并进行正确计算后插入InterestAmounts,则可以执行以下操作:

要创建贷款:

$loan = Loan::create([
  'amount' => $amountValue,
  'interest_rate => $interestRateValue,
]);

要通过正确的计算添加InterestAmounts

$loan->interestAmounts()->create([
  'interest_amount' => $loan->amount * $loan->intrest_rate,
]);

此处,loan_id将自动添加。您甚至可以手动进行操作:

InterestAmount::crate([
  'loan_id' => $loan->id,
  'interest_amount' => $loan->amount * $loan->intrest_rate,
]);