unknownby писал(а): ↑2022.04.28, 15:38
i-programmer писал(а): ↑2022.04.27, 14:43
Да, но он из коробки не заполняет дефолтными данными модель.
Для каких целей вам нужно заполнять дефолтными данными модель? Что вы хотите сделать с дефолтными значениями? Если ничего, то пусть БД сама заполняет эти данные в саму же себя. Зачем сюда ещё фреймворк приплетать?
Ну вот вам как минимум
один сценарий: имеется БД, где нельзя указать дефолтные значения. Именно по этой причине существует метод
loadDefaultValues, который нужно вызывать самостоятельно, вручную, если используется БД с поддержкой установки дефолтных значений.
Соответственно, предположим, я хочу записать в БД данные, поля в базе
NOT NULL. Вопрос: Как установить значения по-умолчанию не переопределяя метод
init в 100 моделях? Почему бы эти значения сразу не инициализировать при создании модели?
Другой сценарий похожий на первый, только в этот раз специально было отказано от установки дефолтных значений в БД по некоторым причинам (специфика реализации проекта, не будем углубляться в детали). Поэтому нужно то же действие: установка дефолтных значений сразу при инициализации модели иначе при вызове метода
save будет
Exception
Третий сценарий: создаю модель, в которую по-умолчанию не будут загружаться пользовательские данные, а я сам, программист, буду туда их заносить и хочу сохранить их в БД. Без валидации. Потому что я себе на 100% доверяю. Пример прост: банально есть операция клонирования сущности, но с определёнными условиями и
clone $model не канает. Нужно именно с нуля создать модель и скопировать два-три-четыре поля. При этом чтобы ещё дефолтные записались. Что делать?
При вызове метода
validate именно это (занесение дефолтных данных) и происходит. Получается какая-то мутация и двойственное поведение и в целом нарушение принципа SOLID. Потому что происходит не только валидация, но и другая операция, которая мутирует данные.
И раз уже как минимум одна операция есть с установкой значений, не понимаю, почему её нельзя сделать по дефолту, чтобы не чудить с
init в каждой модели,
loadDefaultValues в каждой модели или
validate для каждой модели.