Невозможно вставить в пользовательскую таблицу, определенную в hook_schema

У меня есть следующие две почти идентичные таблицы базы данных, определенные в моем пользовательском модуле.install-file. Таблица 'plugin_data' выдает ошибку, когда я пытаюсь вставить в нее. Таблица 'plugin_data_kaks' работает как положено, вставляя данные.

Несмотря на то, что он уже работает, меня интересует, что пошло не так с первой попытки с таблицей plugin_data? Являются ли слова 'ключ' и 'значение' зарезервированными словами в db-api / schema-api?

hook_schema:

  // This one is buggy and data cannot be inserted into it
  $schema['plugin_data'] = array(
    'description' => 'Stores plugin data.',

    'fields' => array(
      'id' => array(
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'description' => 'Primary Key: Unique ID.',
      ),
      'plugin_id' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'description' => 'Plugin machine name.',
      ),
      'key' => array(
        'type' => 'varchar',
        'length' => 255,
        'description' => 'Data key',
        'not null' => TRUE,
      ),
      'value' => array(
        'type' => 'text',
        'description' => 'Data value',
        'not null' => TRUE,
        'serialize' => TRUE,
      ),
    ),
    'primary key' => array('id'),
  );

  // This one works as expected
  $schema['plugin_data_kaks'] = array(
    'description' => 'Plugin data',
    'fields' => array(
      'id' => array(
        'description' => 'Plugin data primary key',
        'type'        => 'serial',
        'unsigned'    => TRUE,
        'not null'    => TRUE,
      ),
      'plugin_id' => array(
        'description' => 'Plugin id',
        'type'        => 'varchar',
        'length'      => 255,
        'not null'    => TRUE,
      ),
      'data_key' => array(
        'description' => 'Data key',
        'type'     => 'varchar',
        'not null' => TRUE,
        'length'   => 100
      ),
      'data_value' => array(
        'description' => 'Data value',
        'type'      => 'text',
        'not null'  => TRUE,
        'serialize' => TRUE
      ),
    ),
    'primary key' => array('id'),
  );

Попытка вставки:

// Value to be serialized and inserted
$data = [
  'hello' => 'world',
  'asd' => 'asd',
];

// This one works
$conn = Database::getConnection();
$result = $conn->insert('plugin_data_kaks')->fields(
  array(
    'plugin_id' => 'test',
    'data_key' => 'testkey',
    'data_value' => serialize($data),
  )
)->execute();

// This one throws an error
$conn = Database::getConnection();
$result = $conn->insert('plugin_data')->fields(
  array(
    'plugin_id' => 'test',
    'key' => 'testkey',
    'value' => serialize($data),
  )
)->execute();

Вот ошибка, выдаваемая вставкой таблицы 'plugin_data':

 1205  07/Dec 14:03  error  php  Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in
                                 your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key,
                                 value) VALUES ('test', 'testkey', 'a:2:{s:5:\"hello\";s:5:\"world\";s:3:\"a' at line 1: INSERT INTO {plugin_data}
                                 (plugin_id, key, value) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2); Array
                                 (
                                     [:db_insert_placeholder_0] => test
                                     [:db_insert_placeholder_1] => testkey
                                     [:db_insert_placeholder_2] => a:2:{s:5:"hello";s:5:"world";s:3:"asd";s:3:"asd";}
                                 )
                                  in Drupal\api_integraatio\Plugin\ApiIntegraatio\TestiSourcePlugin->process() (line 45 of
                                 /var/www/drupalvm/web/modules/custom/api_integraatio/src/Plugin/ApiIntegraatio/TestiSourcePlugin.php).

0 ответов

Другие вопросы по тегам