База данных Drupal api delta - PullRequest
       41

База данных Drupal api delta

0 голосов
/ 17 января 2012

Я работаю над модулем, который напрямую обновляет данные набора флажков таксономии CCK через ajax.

Все работает, за исключением сохранения в базе данных. Используя следующий код:

$data = array(
    'vid' => $nid,
    'nid' => $nid,
    'field_grouping_value' => $tid
);
drupal_write_record('content_field_grouping', $data);

Я получаю сообщения об ошибках, в которых говорится, что я дублирую значение поля «delta». Моя проблема в том, что код пытается записать мои новые данные, но дельта-поле - это объединенный ключ, который не увеличивает автоматически.

Обычно, я бы просто увеличивал поле дельты, но Drupal обрабатывает его так динамично, что я боюсь, что принесу больше вреда, чем пользы: screen shot of database table with delta field

http://i.stack.imgur.com/yTwoN.gif">

Если у nid 3 было другое поле на изображении выше, его поле delta будет иметь значение 2. Затем я удаляю поле с nid 3 и delta 0. Вместо того, чтобы оставить поле delta значения 1 и 2, все сбрасывается на 0 и 1

Просто чтобы я не повредил свой сайт, мне интересно, кто-нибудь может посоветовать, как мне решить эту проблему и заставить Drupal динамически обрабатывать поле delta ..... или это не нужно?

1 Ответ

1 голос
/ 17 января 2012

Вы будете в полной безопасности, просто используя следующую доступную дельту, CCK повторяет это каждый раз, когда узел с этим полем редактируется и сохраняется в любом случае (именно поэтому вы видите корректировки при удалении полей).Примерно так должно работать:

$next_delta = db_result(db_query('SELECT MAX(delta) + 1 AS del FROM {content_field_grouping} WHERE vid = %d AND nid = %d', $nid, $nid));

$data = array(
  'vid' => $nid,
  'nid' => $nid,
  'field_grouping_value' => $tid,
  'delta' => $next_delta
);
drupal_write_record('content_field_grouping', $data);
...