Добрый день, коллеги!
Пишу модуль... При установке модуля создаю две таблицы (сущности): шапка и детали
lib/travels.php
lib/travelsdetails.php
ReferenceField во второй сущности говорит о том поле TRAVEL_ID является внешним ключом.
Я не совсем понял, обеспечит ли ReferenceField защиту от вставки строки в таблицу деталей с несуществующим TRAVEL_ID?
И обеспечит ли это каскадное удаление деталей при удалении строки в шапке?
Я пробовал добавлять и удалять записи в этих таблицах напрямую в БД - никаких предупреждений не выскакивает.
Как обеспечить целостность данных? Нужно добавлять какие-то события?
Пишу модуль... При установке модуля создаю две таблицы (сущности): шапка и детали
lib/travels.php
Код |
---|
namespace Infotech\Travels; use \Bitrix\Main\Entity; class TravelsTable extends Entity\DataManager { public static function getTableName() { return 'infotech_travels_travels'; } public static function getMap() { return array( //ID путешествия new Entity\IntegerField('ID', array( 'primary' => true, 'autocomplete' => true, )), //ID пользователя new Entity\IntegerField('USER_ID', array( 'required' => true, )), //Заголовок путешествия new Entity\StringField('TITLE', array( 'required' => true, )), ); } } |
Код |
---|
namespace Infotech\Travels; use \Bitrix\Main\Entity; class TravelsDetailsTable extends Entity\DataManager { public static function getTableName() { return 'infotech_travels_travels_details'; } public static function getMap() { return array( //ID детали путешествия new Entity\IntegerField('ID', array( 'primary' => true, 'autocomplete' => true, )), //ID путешествия (ссылка на запись в шапке) new Entity\IntegerField('TRAVEL_ID', array( 'required' => true, )), //Заголовок детали путешествия new Entity\StringField('TITLE', array( 'required' => true, )), //Поле TRAVEL_ID это ссылка на первичный ключ в таблице TravelsTable new Entity\ReferenceField( 'TRAVEL_ID', '\Infotech\Travels\TravelsTable', array('=this.TRAVEL_ID' => 'ref.ID') ), ); } } |
Я не совсем понял, обеспечит ли ReferenceField защиту от вставки строки в таблицу деталей с несуществующим TRAVEL_ID?
И обеспечит ли это каскадное удаление деталей при удалении строки в шапке?
Я пробовал добавлять и удалять записи в этих таблицах напрямую в БД - никаких предупреждений не выскакивает.
Как обеспечить целостность данных? Нужно добавлять какие-то события?