jimmi
@jimmi

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".

Заранее спасибо за помощь.
  • Вопрос задан
  • 2899 просмотров
Решения вопроса 1
Keanor
@Keanor
Ведущий разработчик
Чтобы сразу несколько полей задать/получить, можно написать методы с фильтрацией, лишние данные где-то хранить совершенно незачем. И от set('filedName') нужно избавляться в сторону setFieldName() и при возможности использовать их. В zf для заполнения объектов есть удобная вещь - zf2.com.ua/doc/65 можно использовать этот подход
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 12:53
1000 руб./за проект
19 апр. 2024, в 12:41
8000 руб./за проект
19 апр. 2024, в 12:05
1500 руб./в час