В продолжение темы https://drupal.ru/node/141148
В общем есть сайт, по крону подтягиваются данные, и создаются новые ноды, ЕСЛИ ИХ НЕТ
<?php
foreach ($new_data_mont as $key => $row) {
$query = db_select('node', 'n');
$query->innerJoin('field_data_field_provider', 'p', 'n.nid = p.entity_id');
$query ->condition('p.field_provider_value', 'ista');
$query ->condition('n.title', (int)$key);
$query->fields('n', array('nid'));
$pribor_id = $query->execute()->fetchField();
if (is_numeric($pribor_id)) {
watchdog(
'import_ista',
'Прибор есть на сайте. Title: @Name, nid: @ID',
array('@title' => $key, '@ID' => $pribor_id)
);
} else {
progress_fl('span', 'green', "<b>Добавляю новый прибор $key</b><br>");
$node = new stdClass();
$node->type = 'pribor';
node_object_prepare($node);
$node->title = (int)$key;
$node->uid = 1;
$node->language = LANGUAGE_NONE;
$node = node_submit($node);
node_save($node);
$pribor_id = $node->nid;
watchdog(
'import_ista',
'Прибора нет на сайте. Title: @Name, nid: @ID',
array('@title' => $key, '@ID' => $pribor_id)
);
}
$nids[] = $pribor_id;
}
?>
Те в теории, насколько я понимаю, не может быть два одинаковых тайтла. А у меня второй раз за три месяца уже создаются дубли (Код запускается минимум один раз по крону в сутки и есть ручной запуск)
Вроде как проверка вертает непонятно что (не срабатывает if (is_numeric($pribor_id)))
и в итоге получаем новую ноду, хотя нода с таким заголовком есть. Как вообще такое возможно и почему это случается ИНОГДА
PS. пока писал, додумался добавить вариант на корректность sql ответа, только пока не знаю как.
Комментарии
Я бы обвернул в try catch
https://www.php.net/manual/ru/language.exceptions.php