お世話になります。
FriednsOfCake/Search(https://github.com/FriendsOfCake/search)を用いて検索機能を実装したいのですが、細かい動きの部分で、困っております。
具体的に言いますと、以下のような構成でになっております。
・Postsテーブル has many Tags
・Artistsテーブル has many Posts, has many Categories
・ArtistsTagsテーブル
・Areasテーブル has many Artists
Postの一覧のページに検索機能があります。
Tagをチェックボックス(複数可)にして選択・検索出来るようにしているのですが、タグを複数選択して、
複数の検索結果があった場合に、特定のArtistのPostしか表示されません。
説明が難しいのですが、以下にソースを記載させていただきます。
PostsTable.php
PHP
1$this->addBehavior('Search.Search'); 2$this->searchManager() 3 ->add('category', 'Search.Callback', [ 4 'field' => $this->aliasField('Artists.Categories.id'), 5 'callback' => function (Query $query, array $args) { 6 return $query 7 ->matching('Artists.Categories', function (Query $query) use ($args) { 8 return $query 9 ->where([ 10 $this->Artists->Categories->target()->aliasField('id') . ' IN' => implode(",", $args['category']) 11 ]); 12 }); 13 } 14 ]);
Posts/search.ctp
PHP
1<?php 2echo $this->Form->input('category', [ 3 'type' => 'select', 4 'multiple' => 'checkbox', 5 'label' => false, 6 'options' => $categories, 7 'empty' => true, 8]); ?>
(例)
Artist | Category | Post |
---|---|---|
Artist1 | Category1 | Post1 |
Artist2 | Category2 | Post2 |
・Category1とCategory2をチェックして検索した際に、Post1しか表示されない → Post2も表示させたい
・Category2をチェックした場合、Post2は表示される
といった状況です。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー