web-dev-qa-db-ja.com

クエリを使用してすべての言語ですべてのコンテンツを取得する

いくつかの条件付きのクエリを使用してdbからコンテンツを取得するのに疲れており、すべての言語でコンテンツをフェッチする必要があります。私は2つの方法を試しましたが、取得されたのは英語のコンテンツのみですが、他のすべての言語では機能しません...

方法1:

    $langcd = \Drupal::languageManager()->getCurrentLanguage()->getId();
    $query = \Drupal::entityQuery('node')
      ->condition('status', 1)
      ->condition('type', 'page');
      ->condition('langcode', $langcd);
    $nids = $query->execute();

方法2:

    $db = \Drupal::database();
    $query = $db->select('node', 'n');
    $query->fields('n');
    $query->condition('type', "page", "=");
    $query->condition('langcode', $langcd);
    $result = $query->execute()->fetchCol();

そのコンテンツの英語バージョンのみを取得するたびに、その特定のコンテンツの他の言語がdbで利用可能でした。他のすべての言語でコンテンツを取得するのを手伝ってください。

4
mohan prasath

次のコードが機能するはずです。

$langcd = \Drupal::languageManager()->getLanguages();
$langcd = array_keys($langcd);
$query = \Drupal::entityQuery('node')
        ->condition('status', 1)
        ->condition('type', 'page');
$query->condition('langcode', $langcd, 'IN');
$nids = $query->execute();

まずアクティブな言語のリストを取得してから、langcodeの条件をINに変更します。

3
Vishal Patil