web-dev-qa-db-ja.com

分類用語のリストを表示するときのエラー

分類用語のリストを表示しようとすると、「予期しないエラー」が発生します。私は最近8.7に更新しましたが、更新前から問題が続いていると感じています。ウォッチドッグに表示されるエラーは次のとおりです。

Drupal\Core\Database\DatabaseExceptionWrapper:SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。 MySQLサーバーのバージョンに対応するマニュアルで、n '(')AS式FROM tfr INNER JOIN tr ON tfrを使用するための正しい構文を確認してください。 = tr。そしてtr。 = 0 INNER JOIN(1行目のS ':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; Drupal\taxonomy\TermStorage-> getTermIdsWithPendingRevisions()の配列([:db_condition_placeholder_0] => 1)(/ Applications/MAMP/htdocs/libnews/core/modules/taxonomy/srcの404行目) /TermStorage.php)。

これが関連しているかどうかはわかりませんが、drushを使用してデータベースを更新しようとすると、エラーが発生します。

エラー:system_update_8702()のnullでメンバー関数getKey()を呼び出す(/Applications/MAMP/htdocs/libnews/core/modules/system/system.installの行2278)#0

これは私の専門分野の範囲外なので、かなり困惑しています。

4
JOakland

私のサーバーでも同様のエラーが発生しました。機能させるには、TermStorage.phpの関数を変更する必要がありました。

ただの警告です。このコアはハックであり、コアで修正されたら元に戻す必要があります。 getTermIdsWithPendingRevisions()を以下で置き換えます。

  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

これは、分類用語で更新されないエンティティ定義に関連しています。回避策でエラーは解決しますが、エンティティはまだ更新されていません。ステータスレポート(/ admin/reports/status)を確認すると、このエラーが見つかります。

エンティティとフィールドの定義の不一致エンティティタイプとフィールドの定義で次の変更が検出されました。分類用語分類用語エンティティタイプを更新する必要があります。リビジョンIDフィールドをインストールする必要があります。リビジョン作成時刻フィールドをインストールする必要があります。リビジョンユーザーフィールドをインストールする必要があります。リビジョンログメッセージフィールドをインストールする必要があります。デフォルトのリビジョンフィールドをインストールする必要があります。リビジョン翻訳の影響を受けるフィールドをインストールする必要があります。

Drupal 8.7.xはDrushエンティティの更新をサポートしていないため、今のところ解決策は見つかりません。

何か助け?

1
jbfelix

Drupalコアバージョン8.7.2およびdrush updb -yエラーを修正しました:

分類モジュール:分類用語を改訂可能に更新します。語彙から「階層」プロパティを削除します。

0
Achraf JEDAY

Sites.com/update.phpで更新してみてください。それは私のためにこの問題を解決しました。

0
Alexey Dyomin