web-dev-qa-db-fra.com

EntityQuery avec une condition sur un tableau

J'essaie de lister tous les champs où un type de paragraphe est référencé (pour trouver tous les contenus qui ont des paragraphes d'un type spécifique).

Mon problème: je fais une EntityQuery sur le type d'entité field_config pour trouver les champs. Mais, la condition sur laquelle paragraph_type est ciblé ne fonctionne pas correctement et retourne tous les champs qui peuvent contenir un paragraphe sans tenir compte du type.

Voici mon code:

// Recover my paragraph_type selected in my form.
$paragraph_type = $form_state->getValue('paragraph_type');

// List all field_config which referred this paragraph_type.
$query = \Drupal::entityQuery('field_config')
  ->condition('field_type', 'entity_reference_revisions')
  ->condition('settings.handler', 'default:paragraph')
  ->condition('settings.handler_settings.target_bundles', $paragraph_type, 'IN');

$field_config = $query->execute();

Par exemple, j'ai un type de paragraphe "press_release_about" qui ne peut être ajouté que dans un communiqué de presse dans un domaine spécifique. Mais pour ce paragraphe (et tous les autres), ce sont tous les champs qui peuvent contenir un paragraphe dans le système qui sont retournés.

Lorsque j'inspecte un field_config qui fait référence au paragraphe, je peux voir que settings.handler_settings.target_bundles est un tableau des types de paragraphes qui peuvent être ajoutés avec ce champ. Le format est:

[settings:protected] => Array
    (
        [handler] => 'default:paragraph'
        [handler_settings] => Array
            (
                [target_bundles] => Array
                    (
                        [1col_text] => 1col_text
                        [1col_image] => 1col_image
                        [1col_quote] => 1col_quote
                        [1_col_graphique] => 1_col_graphique
                        [2_cols_texte_media] => 2_cols_texte_media
                        [2_cols_texte_graphique] => 2_cols_texte_graphique
                        [2_cols_text] => 2_cols_text
                    )
              )
         )

Si je supprime la condition ->condition('settings.handler_settings.target_bundles', $paragraph_type, 'IN'), cela ne change rien. Et si je change le INpar NOT IN, Je n'ai aucun résultat.

Je ne sais pas si je n'écris pas correctement mon état ou si mon erreur est ailleurs.

4
Claire D

essayez d'utiliser un tableau au lieu de la valeur de $ paragraph_type.

ce serait comme ça:

->condition('settings.handler_settings.target_bundles', [$paragraph_type], 'IN')
1
izus