-
Notifications
You must be signed in to change notification settings - Fork 0
/
TableSearchSource.php
41 lines (33 loc) · 1 KB
/
TableSearchSource.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
namespace Artvys\Search\Cake\Engines\Compiled\SearchSources\Table;
use Artvys\Search\Engines\Compiled\SearchSources\Field\FieldSearchSource;
use Artvys\Search\Engines\Compiled\SearchSources\Field\ResultQueryBuilder;
use Artvys\Search\SearchResult;
use Cake\ORM\Entity;
use Cake\ORM\Query;
use Cake\ORM\Table;
/**
* @template T as Entity
*/
abstract class TableSearchSource extends FieldSearchSource {
abstract protected function table(): Table;
protected function makeResultQueryBuilder(): ResultQueryBuilder {
return new TableResultQueryBuilder(
$this->buildNewTableQuery(),
$this->makeResultMapper()
);
}
protected function buildNewTableQuery(): Query {
return $this->applyTableQueryScopes($this->newTableQuery());
}
protected function newTableQuery(): Query {
return $this->table()->find();
}
protected function applyTableQueryScopes(Query $query): Query {
return $query;
}
/**
* @return callable(T): SearchResult
*/
abstract protected function makeResultMapper(): callable;
}