Добрый день, коллеги!
Пишу модуль... При установке модуля создаю две таблицы (сущности): шапка и детали
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?
И обеспечит ли это каскадное удаление деталей при удалении строки в шапке?
Я пробовал добавлять и удалять записи в этих таблицах напрямую в БД - никаких предупреждений не выскакивает.
Как обеспечить целостность данных? Нужно добавлять какие-то события?