Просмотров: 26820
Дата последнего изменения: 08.08.2023
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
5
Недоступно в лицензиях:
Ограничений нет
Подробное описание отношений можно найти в соседней главе Отношения. Здесь же приведена спецификация управляющих отношениями методов.
Для полей отношений работают уже описанные выше методы get, require, fill, reset, unset.
Важно! Несмотря на то, что в качестве значения отношений используется объект Коллекции, изменять связи можно только через методы
addTo,
removeFrom,
removeAll объектов-партнеров. Изменение коллекции напрямую (
add,
remove) не приведет к желаемому результату.
- addTo
Метод addTo добавляет новую связь между объектами:
// инициализация издателя
$publisher = \Bitrix\Main\Test\Typography\PublisherTable::getByPrimary(253)
->fetchObject();
// инициализация книги
$book = \Bitrix\Main\Test\Typography\BookTable::getByPrimary(2)
->fetchObject();
// добавление книги в коллекцию отношения
$publisher->addToBooks($book);
// сохранение
$publisher->save();
Вызов метода связывает объекты лишь в памяти, после него необходимо зафиксировать изменения методом save.
- removeFrom
Удаление связей отношений removeFrom работает похожим образом:
// инициализация издателя
$publisher = \Bitrix\Main\Test\Typography\PublisherTable::getByPrimary(253)
->fetchObject();
// инициализация книги
$book = \Bitrix\Main\Test\Typography\BookTable::getByPrimary(2)
->fetchObject();
// удаление одной конкретной книги издателя
$publisher->removeFromBooks($book);
// сохранение
$publisher->save();
- removeAll
Удаление сразу всех записей можно сделать одним вызовом:
// инициализация издателя
$publisher = \Bitrix\Main\Test\Typography\PublisherTable::getByPrimary(253)
->fetchObject();
// удаление всех книг издателя
$publisher->removeAllBooks();
// сохранение
$publisher->save();
Для такой операции необходимо знать исходные значения - какие в данный момент есть Книги у Издателя. Поэтому, если значение поля BOOKS не было выбрано изначально, оно будет выбрано автоматически перед удалением.
В качестве альтернативы можно использовать универсальные неименованные методы:
$fieldName = 'BOOKS';
$publisher->addTo($fieldName, $book);
$publisher->removeFrom($fieldName, $book);
$publisher->removeAll($fieldName);