Știu că există o mulțime de alte fire despre asta, dar cred că al meu este unul ciudat și mi-am petrecut ultima zi depanând cauza fără noroc până acum, așa că sperând că cineva cu mai multe cunoștințe despre scheme/stocare pe teren mă poate ajuta.
În primul rând, un mic context despre ceea ce fac. Am un set de configurații care este împachetat folosind modulul de caracteristici și implementat ca pachet pe o serie de alte site-uri ale noastre. O parte a acestui set de caracteristici sunt o serie de tipuri de feed pentru importarea conținutului în noduri. Când implementez această funcție pe un singur site, primesc eroarea „Definiții de entitate și/sau câmp nepotrivite” pentru câmpul feeds_item. Pe celălalt site pe care îl implementez, nu primesc nicio eroare. Faptul că greșește pe una, dar nu pe cealaltă este ciudat.
Am urmărit problema până la SqlContentEntityStorageSchema::requiresFieldStorageSchemaChanges
. În special, ceea ce se întâmplă este că valoarea de $installed_schema
este o matrice goală pe site cu eroare, dar are date pe site fără eroare.
/**
* {@inheritdoc}
*/
funcția publică necesităFieldStorageSchemaChanges(FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) {
$table_mapping = $this->getTableMapping($this->entityType);
dacă (
$definiție_storage->hasCustomStorage() != $original->hasCustomStorage() ||
$definiție_storage->getSchema() != $original->getSchema() ||
$definiție_storage->isRevisionable() != $original->isRevisionable() ||
$table_mapping->allowsSharedTableStorage($storage_definition) != $table_mapping->allowsSharedTableStorage($original) ||
$table_mapping->requiresDedicatedTableStorage($storage_definition) != $table_mapping->requiresDedicatedTableStorage($original)
) {
returnează TRUE;
}
if ($storage_definition->hasCustomStorage()) {
// Câmpul are stocare personalizată, așa că nu știm dacă există o modificare a schemei
// este necesar sau nu, dar din moment ce conform verificărilor inițiale de mai devreme
// funcția, nimic din definiția schimbată pe care o gestionăm, noi
// returnează FALSE.
returnează FALSE;
}
$schema_actuală = $this->getSchemaFromStorageDefinition($storage_definition);
$this->processFieldStorageSchema($schema_actuală);
$installed_schema = $this->loadFieldSchemaData($original);
$this->processFieldStorageSchema($installed_schema);
returneaza $schema_actuala != $schema_instalata;
}
Dacă verific în interiorul valoare cheie
tabel cu aceste interogări selectați * din key_value unde colecția ca „entity.storage_schema.sql” și numele ca „node.field_schema_data.feeds_item”;
este, de asemenea, gol pe 1, dar nu pe celălalt:
Deci, undeva, schema nu a fost instalată corect pe un site. O pot repara instalând devel-entity-updates
modul sau scrierea unui cârlig de actualizare care pur și simplu salvează definiția existentă de stocare a câmpului, dar sper că cineva are o perspectivă despre De ce asta se intampla. Mulțumesc!
N.B Site-ul cu erori ruleaza pe Drupal 9.2.10
în timp ce site-ul fără erori rulează 9.2.11
dar nu sunt sigur că asta face diferența.
De asemenea, ar trebui să subliniez că câmpurile sunt de fapt instalate bine și funcționează. Problema este doar eroarea de nepotrivire.