Ошибка параграфа, нода не существует на которую ссылается поле в параграфе.

Главные вкладки

Аватар пользователя buddy90210 buddy90210 26 октября 2023 в 17:54

Всем привет!
Ситуация такая, у ноды есть параграф в котором есть поле ссылка на сущность (другую ноду), если удалить ноду на которую ссылался в параграфе, то параграф пропадает из первой ноды и выдают ошибку что нода не существует. Соответственно из админки поправить не получается, например удалить этот параграф с битой ссылкой.

Может есть готовые решения? Или надо ручками написать хук при удалении ноды на проверку всех параграфов нет ли ее в прикрепленных к полю параграфа и если есть то удалить и параграф.

Или может как то иначе можно это решить.

Комментарии

Аватар пользователя buddy90210 buddy90210 26 октября 2023 в 20:37

В общем, как я понял нет защиты от такого поведения)
Чтобы удалить параграф с удаленной нодой сделал небольшую функцию чтобы не лезть в БД

<?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. В приведенном коде я просто сношу параграф целиком, в идеале надо проверять если нода не одна то просто перезаписывать их по новой в параграф, хотя в этом случае может и не будет такого поведения)

Аватар пользователя VasyOK VasyOK 3 ноября 2023 в 11:39

Может можно сделать вьюху, которая будут выводить параграфы не имеющие родителя, а потом... не знаю даже...
Был такой модуль
https://www.drupal.org/project/paragraphs_clean
но там чето пишут что он структуру чего-то сломать может. В релизах можно скачать.