File tree 2 files changed +56
-1
lines changed
src/Infrastructure/Repository
2 files changed +56
-1
lines changed Original file line number Diff line number Diff line change @@ -17,13 +17,15 @@ final class WordPressDatabaseDegreeProgramCollectionRepository implements Degree
17
17
{
18
18
public function __construct (
19
19
private DegreeProgramViewRepository $ degreeProgramViewRepository ,
20
- private WpQueryArgsBuilder $ queryArgsBuilder
20
+ private WpQueryArgsBuilder $ queryArgsBuilder ,
21
+ private WpQuerySplitter $ querySplitter
21
22
) {
22
23
}
23
24
24
25
public function findRawCollection (CollectionCriteria $ criteria ): PaginationAwareCollection
25
26
{
26
27
$ query = new WP_Query ();
28
+ $ criteria = $ this ->querySplitter ->maybeSplitQuery ($ criteria );
27
29
/** @var array<int> $ids */
28
30
$ ids = $ query ->query (
29
31
$ this ->queryArgsBuilder
@@ -48,6 +50,10 @@ public function findRawCollection(CollectionCriteria $criteria): PaginationAware
48
50
public function findTranslatedCollection (CollectionCriteria $ criteria , string $ languageCode ): PaginationAwareCollection
49
51
{
50
52
$ query = new WP_Query ();
53
+ $ criteria = $ this ->querySplitter ->maybeSplitQuery (
54
+ $ criteria ->withLanguage ($ languageCode )
55
+ );
56
+
51
57
/** @var array<int> $ids */
52
58
$ ids = $ query ->query (
53
59
$ this ->queryArgsBuilder
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ declare (strict_types=1 );
4
+
5
+ namespace Fau \DegreeProgram \Common \Infrastructure \Repository ;
6
+
7
+ use Fau \DegreeProgram \Common \Application \Repository \CollectionCriteria ;
8
+ use WP_Query ;
9
+
10
+ final class WpQuerySplitter
11
+ {
12
+ public function __construct (
13
+ private WpQueryArgsBuilder $ queryArgsBuilder
14
+ ) {
15
+ }
16
+
17
+ /**
18
+ * @param CollectionCriteria $criteria
19
+ * @return CollectionCriteria
20
+ */
21
+ public function maybeSplitQuery (CollectionCriteria $ criteria ): CollectionCriteria
22
+ {
23
+ $ hisCodes = $ criteria ->hisCodes ();
24
+
25
+ if (count ($ hisCodes ) <= 1 ) {
26
+ return $ criteria ;
27
+ }
28
+
29
+ $ ids = [];
30
+
31
+ foreach ($ hisCodes as $ hisCode ) {
32
+ $ criteria = $ criteria ->withHisCodes ([$ hisCode ]);
33
+ $ query = new WP_Query ();
34
+ /** @var array<int> $ids */
35
+ $ ids = array_merge (
36
+ $ query ->query (
37
+ $ this ->queryArgsBuilder
38
+ ->build ($ criteria )
39
+ ->args ()
40
+ ),
41
+ $ ids
42
+ );
43
+ }
44
+
45
+ return $ criteria
46
+ ->withHisCodes ([])
47
+ ->withInclude ($ ids );
48
+ }
49
+ }
You can’t perform that action at this time.
0 commit comments