次のクエリがあります。
$query = \Drupal::entityQuery('node')
->condition('type', 'case_study')
->condition('status', '1')
->sort('changed', 'DESC')
->pager(4);
$query->condition('title', "%QUERY%", "LIKE");
$nids = $query->execute();
これは正常に機能しますが、明らかにノードのタイトルのみを検索します。私のケーススタディノードのフィールドはこのように構成されています
- Case Study
- title
- field_page_banner
- ...
- field_rows <-- this is my paragraphs field
段落には複数のタイプを含めることができ、コンテンツの作成時にユーザーが選択します。
段落の内容を検索するようにクエリを変更できるようにしたいのですが。たとえば、ユーザーが「リッチテキスト」段落タイプを追加すると、テキストが検索されます。
これは組み込みの検索機能では問題なく機能します。検索機能を使用したケーススタディのページを作成したいだけです。
Drupal 8.2.4およびParagraphs 8.x-1.0を使用しています。
\ Drupal :: entityQueryオブジェクトは私が信じているJOINをサポートしていません: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21Query%21QueryInterface.php/interface/QueryInterface /8.2.x
もしそうなら、段落バンドルに参加し、それを好きなだけ好きになることができます。
私はビューで次のアプローチをお勧めしますが、それが機能しない可能性があります。
title
とfield_rows
が含まれていることを確認します(必要に応じて、field_rowsをビューに表示しないようにできます)。Grouped Filter
とExpose
を追加し、title
とfield_rows
の値を使用するように選択します。これでうまくいくはずです...
テストを続け、クエリを書き込んだ後、段落の結合をサポートしていることがわかりました。以下は私のクエリです
$query = \Drupal::entityQuery('node'); $query->condition('field_content_type_paragraph_name.entity.field_paragraph_field_machine_name.target_id',"NODE ID HERE"); $entity_ids = $query->execute();
これが生成されたクエリです
[node__field_content_type_paragraph_name] => Array
(
[join type] => INNER
[table] => node__field_content_type_paragraph_name
[alias] => node__field_content_type_paragraph_name
[condition] => node__field_content_type_paragraph_name.entity_id = base_table.nid
[arguments] => Array
(
)
)
[paragraphs_item] => Array
(
[join type] => LEFT OUTER
[table] => paragraphs_item
[alias] => paragraphs_item
[condition] => paragraphs_item.id = node__field_content_type_paragraph_name.field_content_type_paragraph_name_target_id
[arguments] => Array
(
)
)
[paragraph__field_paragraph_field_machine_name] => Array
(
[join type] => INNER
[table] => paragraph__field_paragraph_field_machine_name
[alias] => paragraph__field_paragraph_field_machine_name
[condition] => paragraph__field_paragraph_field_machine_name.entity_id = paragraphs_item.id
[arguments] => Array
(
)
)