Drupal: обновить или вставить запись в таблицу — drupal_write_record

Одним из способов удалить или вставить запись в системную таблицу на Drupal является функция под названием drupal_write_record(). Как вы наверное уже догадались, она позволяет либо вставить, либо удалить запись таблицы, но с парочкой существенных, и весьма неприятных нюансов, которые будут описаны ниже.

Описание задачи:

Итак, пусть мы имеем таблицу ImyaModulya_testTable. У нее есть N-ое количество обычных полей неважно какого типа. К примеру пусть это будут id, nazvanie_knigki, god_izdaniya и avtor, где, обратите пристальное внимание, поле id будет у нас primary-ключем / праймари-кеем. Исходя из данной информации код будет вот таким.

Варианты кода с drupal_write_record:

1. Вставка новых записи в таблицу (сразу напишу, что просто вписать primary key для обоих случаев у вас применительно к описанной ситуации не получится, т.к. обязательно будет генерироваться неприятное исключение):

<?php
$fields['id'] = 890;
$fields['nazvanie_knigki'] = 'Мертвые души';
$fields['god_izdaniya'] = 'Кто его знает какой';
$fields['avtor'] = 'Н.В. Гоголь';
drupal_write_record('ImyaModulya_testTable', $fields);
?>

2. Обновление уже существующей записи, с учетом primary key:

<?php
$fields['id'] = 890;
$fields['nazvanie_knigki'] = 'Мертвые души';
$fields['god_izdaniya'] = 'Кто его знает какой';
$fields['avtor'] = 'Н.В. Гоголь';
drupal_write_record('ImyaModulya_testTable', $fields, array('id'));
?>

Представленный вариант с применением drupal_write_record() крайне неудобен, т.к. веб-программисту при каждом запросе придется как-то проверять существует ли в заданной таблице базы данных поле с указанным значением primary key или нет, иначе в случае положительного ответа будет возникать ошибка типа duplicate entry (или что-то в этом роде, точно сейчас не вспомню).

Подведем итог:

Потому оптимальным вариантом будет использование конструкции db_merge(), которая лишена описанных недостатков. Пример её использования в указанном контексте я рассмотрю в одной из следующих статеек.

Актуально для Drupal 7.

Опубликовано 4-12-2013 в 11:58


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>











Свежие комментарии

  • krasnov8953: к записи Не работает как мне кажется строчка $newTvId = $ »
  • Dimanski: к записи ничего не понимаю. Ставлю ModX на хостинг r01.ru »
  • Дмитрий: к записи Спасибо! Очень выручили. С битриксом беда, а прав »
  • леонид: к записи как сделать что были в ряд? у меня получается по о »
  • Администратор: к записи Статический IP. »
  • Steel: к записи Администратор, вы данную проблему решили подключен »
  • Дмитрий: к записи Хотел узнать как прикрутить данное окно (http://re »

Последние твиты