Bump.Вопрос тот же ,как организовать ссылочную целостность(чтоб при удалении одной записи удалялась запись в другой сущности).Пока наколхозил так:
(При данном колхозном варианте, нельзя добавлять запись, если во второй сущности(на которую ссылается текущая сущность нет записи) . С обновлением так же), но это ведб не ссылочная целостность,это не пойми что-такое. Есть более толковый вариант ?
<?php
namespace Dev\Provinfo;
use Bitrix\Main\Entity;
class ProvidersInfoTable extends Entity\DataManager {
public static function getTableName() {
return 'n_providers_info';
}
public static function getFilePath() {
return __FILE__;
}
public static function getMap() {
return array(
new Entity\TextField('CONTENT'),
new Entity\IntegerField('PROVIDER_ID', array('primary' => true,
)
), /* PROVIDER_ID - потому что мне надо привязаться к конкретному свойству типа список , в котором лежат постащики */
new Entity\ReferenceField(
'PROVIDER', '\Bitrix\Iblock\PropertyEnumerationTable', array('=this.PROVIDER_ID' => 'ref.ID'), array('join_type' => 'LEFT')
),
new Entity\DatetimeField('DATATIME', array('required' => false))
);
}
public static function OnBeforeAdd(Entity\Event $event) { //Добавляя проверяем, а существует ли вообще такой поставщик ,который хранится в свойстве списке-каталога
$result = new Entity\EventResult;
$data = $event->getParameter("fields");
$prov_id = $data['PROVIDER_ID'];
$rowEnumItem = \Bitrix\Iblock\PropertyEnumerationTable::getList(array(
'select' => array('ID'),
'filter' => array('=ID' => $prov_id, '=PROPERTY_ID' => 726), //ID свойства-списка в котором лежат постовщики
));
if ($rowEnumItem->getSelectedRowsCount() !== 1) {
$result->addError(new Entity\EntityError(
'Значение свойства-списка не является поставщиком'
));
}
return $result;
}
public static function onBeforeUpdate(Entity\Event $event) { //Обновляя проверяем, а ну грохнули ли того постовщика из свойства-списка
$result = new Entity\EventResult;
$data = $event->getParameter('primary');
// print_r($data);
$prov_id = $data['PROVIDER_ID'];
$rowEnumItem = \Bitrix\Iblock\PropertyEnumerationTable::getList(array(
'select' => array('ID'),
'filter' => array('=ID' => $prov_id, '=PROPERTY_ID' => 726), //ID свойства-списка в котором лежат постовщики
));
if ($rowEnumItem->getSelectedRowsCount() !== 1) {
self::delete($prov_id); //Если грохнули - удаляем запись в текущей сущьности вместо обновления
$result->addError(new Entity\EntityError(
'Значение свойства-списка не является не относится больше к постовщикам '
));
}
return $result;
}
}
?>