I try to list all fields where a paragraph type is referenced (to find all contents which have paragraphs of a specific type).
My problem: I do a EntityQuery on field_config entity type to find the fields. But, the condition on which paragraph_type are targeted doesn't work correctly and return all fields which can content a paragraph disregarding the type.
Here my 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();
For exemple, I have a paragraph type "press_release_about" which can be add only in press release in a specific field. But for this paragraph (and all others), it's all fields which can contains a paragraph in the system which are returned.
When I inspect a field_config which referred paragraph, I can see that settings.handler_settings.target_bundles is an array of the paragraph types which can be add with this field. The format is:
[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 ) ) )
If I remove the condition
->condition('settings.handler_settings.target_bundles', $paragraph_type, 'IN'), this change nothing. And if I change the
NOT IN, I have no result.
I don't know if I don't write my condition correctly or if my error is elsewhere.