Что то странное. Импорт node

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

Аватар пользователя voviko voviko 18 января 2018 в 23:41

Лыжи не едут.
Пытаюсь импортировать очень большой каталог, со сложной структурой и тп.
прогресс с помощью ob_flush()
Сначала создаю термины, потом ноду с товарами.
У терминов 5 левелов. С терминами все нормально.
Когда доходит дело до product_display то проверяю функцией по полю с уникальным номером и по условию добавляю карточку товара с товарами.

если кратко :
1. проверить по коду (уникальный на каждую карточку товаров)
2. добавить карточку с товарами, если нет такой на сайте

Все работает, импорт запускается.
И тут начинается непонятное.
Если несколько раз запустить и остановить импорт, то, ИНОГДА, РАНДОМНАЯ карточка товара может быть добавлена несколько раз.

<?php
  $nid 
XXXXXXXX_catalog_search_product_display ($data_l5_item$data_l5_item->short_name);
                       
//Если не найшли ноду
if(!$nid) {
  
$nid XXXXXXXX_catalog_add_product_display ($data_product_display$parent_l4); //Добавление карточки и товаров
}
//Ищем карточку товара по коду
function XXXXXXXX_catalog_search_product_display ($data_l5_item$short_name) {
    
displat_text($short_name,'br''red');
    
    
$query db_select('node''n');
    
$query->innerJoin('field_data_field_short_name''u''n.nid = u.entity_id');
    
$query->fields('u', array('entity_id'));
    
//$query->fields('n', array('nid'));
    
$query->condition('u.bundle''product_display');
    
$query->condition('u.entity_type''node');
    
$query->condition('u.field_short_name_value'$short_name);
    
$nids $query->execute()->fetchCol();

    if(!empty(

$nids)) {
        if(
count($nids) == 1) {
            return 
$nids[0];
        }
        else {
         
//Костыль
            
$returned_nid $nids[0];
            foreach (
$nids as $key=>$nid)  {
                if(
$key 0) {
                    
node_delete($nid);
                    
displat_text('node_delete $short_name = '.$short_name,'br''red'); //Удаляем лишний дисплей, если пробрался
                
}
            }
            
print_r($nids);
            return 
$returned_nid;
        }

    } else {
        return 

FALSE;
    }
}

?>

Ошибка появляется редко. Иногда вылетает ошибка MySQL о дублях, и тоже, в случайном месте.
Такое ощущение, что MySQL не успевает записывать в таблицы, либо таблицы кешируются.
Тут я не знаю куда смотреть.

Комментарии