Получить экземпляр модели в зависимости от типа

У меня есть два вида заметок: ReferenceNote и TaskNote. Они оба унаследованы от BaseNote.

Когда я создаю новую заметку, я ввожу запрос и в зависимости от этого типа создаю соответствующую модель.

Но как я могу получить соответствующую модель, когда мне нужно получить id?

Мое текущее решение:

$base_note = BaseNote::find($id);

$note = $note_factory->getNote($base_note);

На фабрике:

function getNote(BaseNote $base_note) {
    if ($base_note->type === self::REFERENCE_NOTE_TYPE) {
        $note = new ReferenceNote($base_note->getAttributes());
        //logic of adding additional attributes for reference note
    } else {
        $note = new TaskNote($base_note->getAttributes());
        //logic of adding additional attributes for task note
    }
}

Есть ли лучший способ сделать это?

0 ответов

Другие вопросы по тегам