web-dev-qa-db-fra.com

Erreur lors de l'affichage de la liste des termes de taxonomie

Je reçois une "erreur inattendue" lorsque j'essaie d'afficher une liste de termes de taxonomie. J'ai récemment mis à jour vers 8.7, même si j'ai le sentiment que le problème existe depuis avant la mise à jour. Voici l'erreur telle qu'elle apparaît dans le chien de garde:

Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE [42000]: erreur de syntaxe ou violation d'accès: 1064 Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de ') AS expression FROM tfr INNER JOIN tr ON tfr. = tr. ET tr. = 0 INNER JOIN (S 'à la ligne 1: SELECT tfr.tid AS tid, MAX (tfr.) AS expression FROM {} tfr INNER JOIN {} tr ON tfr. = Tr. AND tr. = 0 INNER JOIN (SELECT t .tid AS tid, t.langcode AS langcode, MAX (t.) AS expression FROM {} t WHERE t. =: db_condition_placeholder_0 GROUP BY t.tid, t.langcode) mr ON tfr. = mr. AND tfr.langcode = mr.langcode GROUP BY tfr.tid; Array ([: db_condition_placeholder_0] => 1) dans Drupal\taxonomy\TermStorage-> getTermIdsWithPendingRevisions () (ligne 404 de/Applications/MAMP/htdocs/libnews/core/modules/taxonomy/src /TermStorage.php).

Et je ne sais pas si cela est lié, mais je reçois également une erreur lorsque j'essaie de mettre à jour ma base de données via drush:

Erreur: appel à une fonction membre getKey () sur null dans system_update_8702 () (ligne 2278 de /Applications/MAMP/htdocs/libnews/core/modules/system/system.install) # 0

C'est en dehors de mon domaine d'expertise, donc je suis assez perplexe.

4
JOakland

J'ai également eu une erreur similaire sur mon serveur. J'ai dû changer la fonction dans TermStorage.php pour le faire fonctionner.

Juste un avertissement, ce noyau pirate et devrait être annulé une fois qu'il est fixé dans le noyau. Remplacez getTermIdsWithPendingRevisions () par ce qui suit:

  public function getTermIdsWithPendingRevisions() {
$table_mapping = $this->getTableMapping();
$id_field = $table_mapping->getColumnNames($this->entityType->getKey('id'))['value'];
$revision_field = $table_mapping->getColumnNames($this->entityType->getKey('revision'))['value'];
$rta_field = $table_mapping->getColumnNames($this->entityType->getKey('revision_translation_affected'))['value'];
$langcode_field = $table_mapping->getColumnNames($this->entityType->getKey('langcode'))['value'];
$revision_default_field = $table_mapping->getColumnNames($this->entityType->getRevisionMetadataKey('revision_default'))['value'];

$query = $this->database->select($this->getRevisionDataTable(), 'tfr');
$query->fields('tfr', [$id_field]);
$query->addExpression("MAX(tfr.$revision_field)", $revision_field);

$query->join($this->getRevisionTable(), 'tr', "tfr.$revision_field = tr.$revision_field AND tr.$revision_default_field = 0");

$inner_select = $this->database->select($this->getRevisionDataTable(), 't');
$inner_select->condition("t.$rta_field", '1');
$inner_select->fields('t', [$id_field, $langcode_field]);
$inner_select->addExpression("MAX(t.$revision_field)", $revision_field);
$inner_select
  ->groupBy("t.$id_field")
  ->groupBy("t.$langcode_field");

$query->join($inner_select, 'mr', "tfr.$revision_field = mr.$revision_field AND tfr.$langcode_field = mr.$langcode_field");

$query->groupBy("tfr.$id_field");
return 0;
//return $query->execute()->fetchAllKeyed(1, 0);

}

1
Albert

Ceci est lié aux définitions d'entité qui ne sont pas mises à jour pour les termes de taxonomie. Votre solution de contournement résout l'erreur mais les entités ne sont toujours pas mises à jour. Jetez un œil au rapport d'état (/ admin/reports/status), vous trouverez cette erreur:

Définitions d'entité et/ou de champ incompatibles Les modifications suivantes ont été détectées dans le type d'entité et les définitions de champ. Terme de taxonomie Le type d'entité Terme de taxonomie doit être mis à jour. Le champ ID de révision doit être installé. Le champ Revision create time doit être installé. Le champ utilisateur Révision doit être installé. Le champ de message du journal de révision doit être installé. Le champ de révision par défaut doit être installé. Le champ affecté à la traduction de la révision doit être installé.

Aucune solution trouvée pour le moment car Drupal 8.7.x ne prend plus en charge la mise à jour d'entité drush.

De l'aide ?

1
jbfelix

J'ai Drupal version principale 8.7.2 et drush updb -y a corrigé l'erreur:

module de taxonomie: mettez à jour les termes de taxonomie pour qu'ils soient révisables. Supprimez la propriété 'hierarchy' des vocabulaires.

0
Achraf JEDAY

Essayez d'effectuer une mise à jour avec sites.com/update.php. Cela a résolu ce problème pour moi.

0
Alexey Dyomin