66use Bolt \Extension \Bolt \JsonApi \Storage \Query \PagingResultSet ;
77use Bolt \Storage \Query \ContentQueryParser ;
88use Bolt \Storage \Query \SearchQuery ;
9+ use Bolt \Version ;
910use Doctrine \DBAL \Query \QueryBuilder ;
1011
1112/**
@@ -21,21 +22,30 @@ public function __invoke(ContentQueryParser $contentQuery)
2122 $ cleanSearchQuery = $ contentQuery ->getService ('search ' );
2223
2324 foreach ($ contentQuery ->getContentTypes () as $ contenttype ) {
25+ $ parameters = $ contentQuery ->getParameters ();
26+
2427 //Find out if we are searching or just doing a simple query
25- if ($ searchParam = $ contentQuery -> getParameter ('filter ' )) {
28+ if (array_key_exists ('filter ' , $ parameters )) {
2629 $ query = clone $ cleanSearchQuery ;
2730 } else {
2831 $ query = $ contentQuery ->getService ('select ' );
2932 }
3033
3134 $ repo = $ contentQuery ->getEntityManager ()->getRepository ($ contenttype );
32- $ query ->setQueryBuilder ($ repo ->createQueryBuilder ($ contenttype ));
35+
36+ if (Version::compare ('3.3 ' , '<= ' )) {
37+ // Only for Bolt version 3.3 and up.
38+ $ query ->setQueryBuilder ($ repo ->createQueryBuilder ('_ ' . $ contenttype ));
39+ } else {
40+ // Only for Bolt versions up to 3.2.x.
41+ $ query ->setQueryBuilder ($ repo ->createQueryBuilder ($ contenttype ));
42+ }
3343 $ query ->setContentType ($ contenttype );
34- $ query ->setParameters ($ contentQuery -> getParameters () );
44+ $ query ->setParameters ($ parameters );
3545
3646 //Set the search parameter if searching
3747 if ($ query instanceof SearchQuery) {
38- $ query ->setSearch ($ searchParam );
48+ $ query ->setSearch ($ contentQuery -> getParameter ( ' filter ' ) );
3949 }
4050
4151 //Get Page from the new directive handler that allows pagination
@@ -57,15 +67,18 @@ public function __invoke(ContentQueryParser $contentQuery)
5767 /** @var QueryBuilder $qb */
5868 $ qb = clone $ query ->getQueryBuilder ();
5969
70+ // Get an intersection of current keys, and the ones we need to remove
71+ $ removeparts = array_intersect (array_keys ($ query2 ->getQueryParts ()), ['maxResults ' , 'firstResult ' , 'orderBy ' ]);
72+
6073 $ query2
61- ->resetQueryParts ([ ' maxResults ' , ' firstResult ' , ' orderBy ' ] )
74+ ->resetQueryParts ($ removeparts )
6275 ->setFirstResult (null )
6376 ->setMaxResults (null )
6477 ->select ('COUNT(*) as total ' );
6578
66- $ totalItems = count ($ repo -> findResults ( $ query2 ));
79+ $ totalItems = count ($ query2 -> execute ()-> fetchAll ( ));
6780
68- $ result = $ repo ->findResults ($ qb );
81+ $ result = $ repo ->queryWithLoaded ($ qb );
6982 if ($ result ) {
7083 $ set ->add ($ result , $ contenttype );
7184 $ set ->setTotalResults ((int ) $ totalItems );
0 commit comments