私はLaravel Eloquentモデルで作業しており、継承の問題を抱えています。PHP Laravel親は子供からの動的静的パラメータを継承します
私はBaseModel
クラスを持っています。それはprotected static $dynamicRelations = [];
のパラメータを持ち、いくつかの方法でそれを処理します。
そして、この例ではBaseModel
に拡張された複数のクラスがあります。PageModel
とEventModel
としましょう。
私は、このようなPageModel::setDynamicRelation
などのページモデルの動的な関係を、作成した場合、それは静的変数に代入します:
public static function setDynamicRelation($key, $callback)
{
static::$dynamicRelations[$key] = $callback;
}
この方法では、私がモデルに動的な関係を追加することができます。したがって、私がPageModel::setDynamicRelation('banners', ...)
を実行すると、PageModel
のインスタンス上で、PageModel->banners
を呼び出して関係値を取得できます。
スタティックパラメータBaseModel
にリレーションが保持され、他のモデルに継承されるという問題があります。したがって、PageModel
にリレーションシップを設定してEventModel
をインスタンス化すると、同じ関係が得られますが、これは正しくありません。
関係を子クラスに格納し、他のクラスに継承しないようにするにはどうすればよいですか?私。メソッドが呼び出されるクラスに$dynamicRelations
のコピーを格納する必要があるため、すべての子は同じ関係を共有しません。
ありがとうございます!
なぜ動的なものを使用しないのがよいのですか? – jycr753
@ jycr753これで拡張できますか?私はモジュールが他のモジュールを変更できるようにする必要がある構造を持っているので、 'PageBanners'というモジュールは' Page'モデルのコードを実際に変更することなく 'Page'モデルに動的関係を追加できます。 – Giedrius
それは起こってはいけません。あなたの例では、 'EventModel'は' PageModel'の関係を得るべきではありません。二つの異なるインスタンスです。 – user3158900