モデルでイベントを使用できます。モデルが実際にデータベースに作成される前に計算する場合はcreating
、作成後に計算する場合はcreated
を使用します。あなたのApp \プロバイダ\ AppServiceProvider ::ブート()メソッドで
、両方のモデルのためのイベントを定義します。
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Bill::creating(function ($bill) {
// Do something with $bill
});
}
// etc
}
をコードの繰り返しを回避するには、形質を使用して、両方のクラスでそれを使用することができます。例えばPretendCalculationTrait
それを呼び出し、(必要に応じてディレクトリを作成)app/Traits
に置き:
<?php
namespace App\Traits;
trait PretendCalculationTrait
{
public function pretendCalculate()
{
// Do your stuff
}
}
次に、あなたのモデルでは、この特性を使用します。
class Bill extends Eloquent
{
use App\Traits\PretendCalculationTrait;
// etc.
}
最後に、あなたのAppServiceProviderで、メソッドを呼び出します特性で定義される:
public function boot()
{
Bill::creating(function ($bill) {
return $bill->pretendCalculate();
});
Payment::creating(function ($payment) {
return $payment->pretendCalculate();
});
}
詳細については、Laravel Model Eventsのドキュメントを参照してください。
クラスを作成し、必要なクラスに注入してから、$ this-> billing($ somthing);を使用します。これは私が知る限り最良の簡単な方法です –