ActiveRecords и поля таблиц, где идеал? Имеется php класс для работы с БД, каждый класс имеет список полей текущей таблицы в таком видеprotected $_row = array(
'id' => true,
'name' =>true,
'surname'=>true
);
Этот список полей применяется чтобы отсеять кривые данные при вызове функции ->save();
Также при использовании ничего не может быть проставлено лишнего, чего нету в переменной $_row
Теперь ситуация когда этому классу нужно передать какой-то ключ через setter не входящий в золотой список row, или когда нужно сделать ->get('some LEFT JOIN field'), т.е. получить это поле нету возможности так как оно не входит в массив row.
Проблема решена добавление дополнительного массива по типу// list of extended fields
protected $_moreDataList = array(
'field' => true,
'field1' => true,
'field2' => true
);
Тем самым если мы выбрали в этом классе с помощью LEFT JOIN какие-то дополнительные поля которых нету в переменной $_row то мы их все равно может получить через ->get так как они входят в дополнительную переменную. Почему дополнительная? потому что при save() нам все равной придется отсеять лишнее.
Теперь вопрос. Нужно ли вообще фильтровать get и set наружу с класса? Или достаточно просто фильтровать тот же save() метод и не указывать дополнительные поля. Т.е. избавить себя от геморроя постоянного вписывания этих доп. полей когда делаешь какой-то JOIN не связанный с таблицей класса. А то сделал селект поля field2 через JOIN , смотришь в get('field2') а там пусто. Ааа.. точно, надо ж добавить его в "_moreDataList".
Заранее спасибо за помощь.

21 Авг 2019 в 07:09
141 +1
0
Ответы
1

Думаю, что фильтрация get и set наружу из класса не обязательна, если вам не требуется строгое ограничение доступа к определенным полям. Однако, если вы хотите обеспечить более строгую защиту данных и избежать возможных ошибок при сохранении данных, то фильтрация внешних get и set методов может быть полезной.

Если вы решите не фильтровать get и set методы, то можно ограничить фильтрацию только на уровне сохранения данных в базе (например, в методе save()). Таким образом, вы сможете избежать необходимости постоянно дополнять список полей в массиве $_moreDataList при использовании JOIN запросов.

В конечном итоге, выбор остается за вами и зависит от специфики вашего проекта и требований к безопасности и удобству работы с данными.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 887 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир