ertttert
Вставки в базу данных новых строк и обновления существующих строк являются распространенной программистской задачей. Код обычно определяет, что нужно осуществить — вставку или изменение — а затем выполняет необходимую операцию.
Поскольку каждая таблица, используемая в Drupal, описывается с помощью схемы, Drupal знает, какие поля содержатся в таблицах и каковы значения по умолчанию для каждого поля. Передав ассоциативный массив полей и значений в функцию drupal_write_record()
, можно поручить Drupal сгенерировать и выполнить SQL-запрос, не делая этого вручную.
Предположим, что имеется таблица с записями о коллекции гигантских кроликов. Хук схемы для модуля с описанием таблицы выглядит так:
/** * Реализация hook_schema(). */ function bunny_schema() { $schema['bunnies'] =array( 'description' =>t( 'Stores information about giant rabbits.') ,// Хранит информацию о гигантских кроликах. 'fields' =>array( 'bid' =>array( 'type' => 'serial','unsigned' => TRUE,'not null' => TRUE,'description' =>t( "Primary key: A unique ID for each bunny.") ,// Первичный ключ: уникальный идентификатор для каждого кролика. ) ,'name' =>array( 'type' => 'varchar','length' => 64,'not null' => TRUE,'description' =>t( "Each bunny gets a name.") ,// У каждого кролика есть имя. ) ,'tons' =>array( 'type' => 'int','unsigned' => TRUE,'not null' => TRUE,'description' =>t( 'The weight of the bunny to the nearest ton.') ,// Вес кролика с точностью до тонны. ) ,) ,'primary key' =>array( 'bid') ,'indexes' =>array( 'tons' =>array( 'tons') ,) ,) ;return $schema; }
Вставка новых записей и обновление существующих выполняются элементарно:
$table = 'bunnies'; $record =new stdClass() ; $record->name =t( 'Bortha') ; $record->tons = 2;drupal_write_record( $table, $record) ;// Новый идентификатор кролика $record->bid устанавливается с помощью // drupal_write_record(), т.к. $record передается по ссылке. watchdog( 'bunny', 'Added bunny with id %id.',array( '%id' => $record->bid)) ;// Придумали другое имя. $record->name =t( 'Bertha') ;// Теперь изменим запись в базе данных. // Для изменения нужно передать имя первичного ключа таблицы. drupal_write_record( $table, $record, 'bid') ;watchdog( 'bunny', 'Updated bunny with id %id.',array( '%id' => $record->bid) ) ;
Поддерживается и синтаксис с массивами, хотя если $record
является массивом, то drupal_write_record()
преобразует его во внутренний объект.
Всего комментариев: 6 | |||||||
| |||||||