Issues (74)

Finder/AbstractFinder.php (2 issues)

Severity
1
<?php
2
3
namespace Mdiyakov\DoctrineSolrBundle\Finder;
4
5
use Mdiyakov\DoctrineSolrBundle\Query\Select\AbstractSelectQuery;
6
7
abstract class AbstractFinder
8
{
9
10
    /**
11
     * @return AbstractSelectQuery
12
     */
13
    abstract protected function getQuery();
14
15
    /**
16
     * @param string $searchTerm
17
     * @param string[] $fields
18
     * @param string[] $configFields
19
     * @param bool $isNegative
20
     * @param bool $wildcard
21
     * @param bool $splitPhrase
22
     * @param int $limit
23
     * @return object[]
24
     */
25
    public function findSearchTermByFields(
26
        $searchTerm,
27
        $fields = null,
28
        $configFields = null,
29
        $isNegative = false,
30
        $wildcard = false,
31
        $splitPhrase = true,
32
        $limit = 100
33
    )
34
    {
35
        if ($splitPhrase) {
36
            $words = explode(' ', $searchTerm);
37
        } else {
38
            $words = [$searchTerm];
39
        }
40
41
        $query = $this->getQuery();
42
        $query->setLimit($limit);
43
        if (is_array($fields)) {
44
            foreach ($fields as $field) {
45
                foreach ($words as $word) {
46
                    $query->addOrWhere($field, $word, $isNegative, $wildcard);
47
                }
48
            }
49
        }
50
51
        if (is_array($configFields)) {
52
            foreach ($configFields as $field) {
53
                foreach ($words as $word) {
54
                    $query->addConfigFieldOrWhere($field, $word, $isNegative, $wildcard);
55
                }
56
            }
57
        }
58
59
        return $query->getResult();
60
    }
61
62
    /**
63
     * @param string $from
64
     * @param string $to
65
     * @param array $fields
66
     * @param bool $isNegative
67
     * @param bool|false $exclusiveFrom
68
     * @param bool|false $exclusiveTo
69
     * @param int $limit
70
     * @return \object[]
71
     */
72
    public function findByRange(
73
        $from,
74
        $to,
75
        $fields = [],
76
        $isNegative = false,
77
        $exclusiveFrom = false,
78
        $exclusiveTo = false,
79
        $limit = 100
80
    )
81
    {
82
        $query = $this->getQuery();
83
        $query->setLimit($limit);
84
        if (is_array($fields)) {
0 ignored issues
show
The condition is_array($fields) is always true.
Loading history...
85
            foreach ($fields as $field) {
86
                $query->addRangeOrWhere($field, $from, $to, $exclusiveFrom, $exclusiveTo, $isNegative);
87
            }
88
        }
89
90
        return $query->getResult();
91
    }
92
93
    /**
94
     * @param string $searchTerm
95
     * @param string[] $fields
96
     * @param bool $isNegative
97
     * @param bool|false $splitPhrase
98
     * @param int $distance
99
     * @param int $limit
100
     * @return \object[]
101
     */
102
    public function findFuzzyTerm($searchTerm, $fields, $isNegative = false, $splitPhrase = false, $distance = 1, $limit = 100)
103
    {
104
        if ($splitPhrase) {
105
            $words = explode(' ', $searchTerm);
106
        } else {
107
            $words = [$searchTerm];
108
        }
109
110
        $query = $this->getQuery();
111
        $query->setLimit($limit);
112
        if (is_array($fields)) {
0 ignored issues
show
The condition is_array($fields) is always true.
Loading history...
113
            foreach ($fields as $field) {
114
                foreach ($words as $word) {
115
                    $query->addFuzzyOrWhere($field, $word, $isNegative, $distance);
116
                }
117
            }
118
        }
119
120
        return $query->getResult();
121
    }
122
}