У меня есть проект, в котором ряд моделей определяется с помощью Eloquent. Это просто по большей части, но мне трудно понять, как обращаться с новым случаем. Я собираюсь избегать использования laravel/красноречивой терминологии в случае, если я просто затушевываю проблему.Как обработать наследование модели в Laravel?
У меня есть таблица под названием Question
с полями id, QuestionTypeID, QuestionStatement
.
На основе QuestionTypeID
необходимо создать экземпляр другого класса, который может извлекать информацию для дополнительных таблиц или использовать другую бизнес-логику в коде PHP.
Все эти типы вопросов могли бы реализовать общий интерфейс, как:
interface Question {
int id;
string statement;
function ask($params);
// + CRUD stuff I suppose
}
Как я могу иметь дело с наличием различных моделей Вопрос? Являются ли необычные модели неотъемлемо привязаны к определенной таблице?
У меня есть, например, SQLQuestion
(где логика просто выполнила бы хранимую инструкцию SQL, извлеченную из некоторой таблицы поиска и возвратила ответ) и TimeFrameQuestion
(логика которой требует вызовов некоторых модулей TimeFrame).
Единственный стол TimeFrameQuestion
можно вытащить из общей таблицы Question
, так как он не имеет прямого отношения к какой-либо другой таблице.
Можно ли иметь 2 модели и посмотреть на Question
таблицы без SQLQuestion
коллекции также содержащей все записи, которые имеют TimeFrameQuestion
типа и наоборот?
Это немного сложно ответить, не зная о других отношениях, которые вы ожидаете от «Вопроса». В зависимости от того, насколько простым или сложным он является, «QuestionInterface» может быть хорошим подходом, а затем у вас разные модели «Вопрос», каждая из которых имеет свою красноречивую модель, содержащую разную информацию. – Scopey
@Scopey приветствует быстрый ответ. Я попытался ответить на ваш комментарий в редактировании вопроса. – OGHaza
* Являются ли модели Eloquent неотъемлемо привязаны к конкретной таблице? * Нет, это не так, но определяет отношения .. поэтому я никогда не думаю об изменении ['protected $ table'] (https://laravel.com/ docs/5.3/eloquent # define-models) на лету .. и только боковое примечание, в php вы можете динамически добавлять поля в классы. Не говоря уже о тех магических функциях. –