我正在使用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
靜態參數中,並由其他模型繼承。因此,如果我將關係ip設置爲PageModel
,然後實例化一個EventModel
,它也會得到相同的關係,這是不正確的。
我該如何使關係存儲在子類中而不被其他類繼承?即需要在方法被調用的類上存儲$dynamicRelations
的副本,所以所有的孩子都不會共享相同的關係?
謝謝!
,如果你想要的東西,動態爲什麼不使用變身? – jycr753
@ jycr753請問您可以擴展一下嗎?我有一個結構,我需要允許模塊更改其他模塊,因此稱爲「PageBanners」的模塊可以向「Page」模型添加動態關係,而不實際更改「Page」模型中的代碼。 – Giedrius
這不應該發生。在你的例子中,'EventModel'不應該獲得'PageModel'的關係,它們是兩個不同的實例。 – user3158900