Этот вопрос возникает из Как я могу преобразовать / привести родительский объект PHP к дочернему объекту?
В настоящее время у меня есть этот код:
class Page extends Model {
// relation 1, 2, 3 that are always present
}
class ArticlePage extends Page {
// relation 4 and 5, that are only present on an ArticlePage
}
class PageSlug extends Model {
public function page()
{
$page = Page::find($this->hd_pag_ID)
->first();
if (!$page instanceof Page) {
return null;
}
switch ($page->layout_id) {
case PageLayout::ARTICLE:
return $this->hasOne(ArticlePage::class, 'category_id', 'hd_pag_ID');
default:
return $this->hasOne(Page::class, 'category_id', 'hd_pag_ID');
}
}
}
Но, как вы видите, теперь я сначала запрашиваю страницу, что нежелательно. Могу ли я изменить используемый класс, не запрашивая страницу отдельно?