我有一个自定义的内容实体,为此我需要更改它的一个字段的类型。
按照更新基字段类型上的示例,我编写了更新基本实体的代码,基本实体更新得很完美。但是,所有修订都有空值,包括当前的修订。尽管数据存储在base_entity表中,但它没有存储在base_entity_revision表中。
如何修改hook_update_N()以同时更新修订表?
发布于 2022-06-27 14:32:20
除了更新主表外,还需要更新修订表,因此应该进行以下更改:
$id_key = $entity_definition->getKey('id');变成$id_key = $entity_definition->getKey('id'); $revision_id_key = $entity_definition->getKey('revision');$table_name = $storage->getDataTable() ?: $storage->getBaseTable();变成$table_name = $storage->getDataTable() ?: $storage->getBaseTable(); $revision_table_name = $storage->getRevisionDataTable() ?: $storage->getRevisionTable();$status_values = $database->select($table_name) ->fields($table_name, [$id_key, 'status_field']) ->execute() ->fetchAllKeyed();变成$status_values = $database->select($table_name) ->fields($table_name, [$id_key, 'status_field']) ->execute() ->fetchAllKeyed(); $status_revision_values = $database->select($revision_table_name) ->fields($revision_table_name, [$revision_id_key, 'status_field']) ->execute() ->fetchAllKeyed();$database->update($table_name) ->fields(['status_field' => NULL]) ->execute();变成$database->update($table_name) ->fields(['status_field' => NULL]) ->execute(); $database->update($revision_table_name) ->fields(['status_field' => NULL]) ->execute();foreach ($status_values as $id => $value) { $database->update($table_name) ->fields(['status_field' => $value]) ->condition($id_key, $id) ->execute(); }变成foreach ($status_values as $id => $value) { $database->update($table_name) ->fields(['status_field' => $value]) ->condition($id_key, $id) ->execute(); } foreach ($status_revision_values as $id => $value) { $database->update($revision_table_name) ->fields(['status_field' => $value]) ->condition($revision_id_key, $id) ->execute(); }https://drupal.stackexchange.com/questions/311803
复制相似问题