Объекты и коллекции
Выборки через fetchObject() и fetchCollection() возвращают типизированные объекты и коллекции со сгенерированными геттерами и сеттерами. Объект отслеживает состояние полей (state), сохраняя через save() только фактически изменившиеся данные, а обращение к невыбранному полю через get() вернет null (или исключение при вызове require*).
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Entity Objects
-
2
Работа с объектами
-
3
Сохранение изменений
-
4
EO_*_Collection
-
5
Итерация по коллекции
-
6
Массовые операции
Материалы
Проверь себя
getTitle() у объекта возвращает null, хотя в базе значение есть. Где искать причину?
В select запроса: поле не выбрано, а get() для невыбранного поля отдаёт null без ошибки. Добавьте поле в setSelect(), дозагрузите через fill() или используйте requireTitle(), который бросит исключение вместо тихого null.
Заказчик жалуется, что после массовой правки через коллекцию половина строк не изменилась, а ошибок нет. Что проверить первым?
Результат save() коллекции — это Result, и его нужно проверять как любой другой. Кроме того, setTitle() с тем же значением не считается изменением и в запрос не попадает: строки, где значение уже совпадало, ORM честно пропустил.
filter() на коллекции бросил CollectionFilterException. Почему?
filter() работает только с неизменённой коллекцией: если до него объекты добавляли, удаляли или меняли, ORM отказывается фильтровать. Сначала отберите объекты, потом меняйте, а для перебора с изменением есть walk().
Чем BookTable::createObject() отличается от new EO_Book?
createObject() подставляет значения по умолчанию из карты и возвращает объект того класса, который задан в getObjectClass(), так что при появлении своего класса код не меняется. Имя EO_Book в коде документация использовать не советует.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить