Всем привет!
Ситуация такая, у ноды есть параграф в котором есть поле ссылка на сущность (другую ноду), если удалить ноду на которую ссылался в параграфе, то параграф пропадает из первой ноды и выдают ошибку что нода не существует. Соответственно из админки поправить не получается, например удалить этот параграф с битой ссылкой.
Может есть готовые решения? Или надо ручками написать хук при удалении ноды на проверку всех параграфов нет ли ее в прикрепленных к полю параграфа и если есть то удалить и параграф.
Или может как то иначе можно это решить.
Комментарии
В общем, как я понял нет защиты от такого поведения)
Чтобы удалить параграф с удаленной нодой сделал небольшую функцию чтобы не лезть в БД
<?php
$query = \Drupal::entityQuery('paragraph');
$query->condition('type', 'products_block');
$query->condition('status', 1);
$query->accessCheck(TRUE);
$result = $query->execute();
if (
$result) {$paragraphs = \Drupal::entityTypeManager()->getStorage('paragraph')->loadMultiple($result);
foreach ($paragraphs as $par) {
$products = $par->get('field_block_products')->getValue();
foreach ($products as $product) {
if ($product['target_id'] == '149') {
$par->delete();
}
}
}
}
?>
Дальше, при удалении ноды таким же образом перебирать все параграфы и смотреть есть ли где нибудь она, если есть то удалять параграф.
P.S. В приведенном коде я просто сношу параграф целиком, в идеале надо проверять если нода не одна то просто перезаписывать их по новой в параграф, хотя в этом случае может и не будет такого поведения)
Может можно сделать вьюху, которая будут выводить параграфы не имеющие родителя, а потом... не знаю даже...
Был такой модуль
https://www.drupal.org/project/paragraphs_clean
но там чето пишут что он структуру чего-то сломать может. В релизах можно скачать.