Получить данные родительской модели в загрузочную функцию static::saving()

Я хочу использовать данные из родительской модели для запуска функции saving() в дочерней модели.

Раньше я вставлял вычисляемые данные в таблицу в модели "Кредит", но теперь мне нужно вставить их в дочернюю модель "InterestAmount"

Loan.php

use Illuminate\Database\Eloquent\Model;
class Loan extends Model
{

    protected $fillable ['amount','interest','status','duration','member_id','loan_type_id','interest_type_id','loan_payment_type_id'];

    //protected $appends = 'interest_amount

    protected static function boot()
    {
        parent::boot();
        static::saving(function($model) {
            $model->interest_amount = ($model->amount/100 )* $model->interest;
        });
    }

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

}

Я хочу удалить функцию сохранения из Loan.php и использовать, как показано ниже.

Интерес.php

use Illuminate\Database\Eloquent\Model;
class InterestAmount extends Model
{
    public function loan()
    {
        $this->belongsTo(Loan::class,'loan_id','id');
    }

    protected static function boot()
    {
        parent::boot();
        static::saving(function($model) {
            $model->interest_amount = ($model->amount/100 )* $model->interest;
        }); 
    }
}

Как получить «сумму» и «проценты» в этой функции?


person Prithvi Tuladhar    schedule 23.04.2019    source источник
comment
Содержит ли ваша таблица InterestAmount столбецinterest_amount?   -  person Zakaria Acharki    schedule 23.04.2019
comment
Я вижу некоторые ошибки в вашем коде, например, функция loan() ничего не возвращает. Вы уверены, что скопировали правильный код?   -  person namelivia    schedule 23.04.2019
comment
я создал модель InterestAmount, так как Interest_amount является многозначным атрибутом, и поэтому я создаю другую модель для хранения нескольких сумм процентов для данного кредита   -  person Prithvi Tuladhar    schedule 23.04.2019
comment
@namelivia да. Извините моя ошибка.   -  person Prithvi Tuladhar    schedule 23.04.2019


Ответы (1)


Переменная $model внутри модели InterestAmount относится к объекту InterestAmount:

static::saving(function($model){
    $model->interest_amount = ($model->loan->amount/100 )* $model->loan->interest;
}); 

Затем вам нужно получить связанные loan, используя ваш метод отношений loan(), а затем получить свойства amount/interest.

ПРИМЕЧАНИЕ. Как говорится в комментарии @namelivia, вам не хватает return в методе loan():

public function loan()
{
    return $this->belongsTo(Loan::class,'loan_id','id');
}
person Zakaria Acharki    schedule 23.04.2019
comment
что еще более важно .. данные в таблицеinterest_amounts должны быть вставлены автоматически после вставки данных ссуды, поскольку я разделяю ссуду на таблицу как Interest_amount, чтобы вставить сумму процентов, которая является многозначным атрибутом. могу ли я получить некоторую помощь?? я думал об использовании события и слушателя, но я понятия не имею, как это сделать. - person Prithvi Tuladhar; 23.04.2019