web-dev-qa-db-ja.com

段落でノードを検索

次のクエリがあります。

$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を使用しています。

1
SteveEdson

\ Drupal :: entityQueryオブジェクトは私が信じているJOINをサポートしていません: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21Query%21QueryInterface.php/interface/QueryInterface /8.2.x

もしそうなら、段落バンドルに参加し、それを好きなだけ好きになることができます。

私はビューで次のアプローチをお勧めしますが、それが機能しない可能性があります。

  • ケーススタディノードのビューを作成する
  • 段落バンドルに関係を追加する(必要な場合)
  • ビューのフィールドリストにtitlefield_rowsが含まれていることを確認します(必要に応じて、field_rowsをビューに表示しないようにできます)。
  • Grouped FilterExposeを追加し、titlefield_rowsの値を使用するように選択します。

これでうまくいくはずです...

1
tenken

テストを続け、クエリを書き込んだ後、段落の結合をサポートしていることがわかりました。以下は私のクエリです

$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
                            (
                            )

                    )
0
Bowen