Completed
Push — master ( 0eb270...4f660e )
by
unknown
04:04 queued 01:31
created

src/Query/Terms.php (1 issue)

assigning incompatible types to properties.

Bug Documentation Major

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Elastica\Query;
4
5
use Elastica\Exception\InvalidException;
6
7
/**
8
 * Terms query.
9
 *
10
 * @author Nicolas Ruflin <[email protected]>
11
 * @author Roberto Nygaard <[email protected]>
12
 *
13
 * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html
14
 */
15
class Terms extends AbstractQuery
16
{
17
    /**
18
     * @var string
19
     */
20
    private $field;
21
22
    /**
23
     * @var array<float|int|string>
24
     */
25
    private $terms;
26
27
    /**
28
     * @var string[]|null
29
     */
30
    private $lookup;
31
32
    /**
33
     * @param array<bool|float|int|string> $terms Terms list, leave empty if building a terms-lookup query
34
     */
35
    public function __construct(string $field, array $terms = [])
36
    {
37
        if (empty($field)) {
38
            throw new InvalidException('Terms field name has to be set');
39
        }
40
41
        $this->field = $field;
42
        $this->terms = $terms;
43
    }
44
45
    /**
46
     * Sets terms for the query.
47
     *
48
     * @param array<bool|float|int|string> $terms
49
     */
50
    public function setTerms(array $terms): self
51
    {
52
        $this->terms = $terms;
0 ignored issues
show
Documentation Bug introduced by
It seems like $terms of type array<integer,boolean|double|integer|string> is incompatible with the declared type array<integer,double|integer|string> of property $terms.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
53
54
        return $this;
55
    }
56
57
    /**
58
     * Adds a single term to the list.
59
     *
60
     * @param bool|float|int|string $term
61
     */
62
    public function addTerm($term): self
63
    {
64
        if (!\is_scalar($term)) {
65
            throw new \TypeError(\sprintf('Argument 1 passed to "%s()" must be a scalar, %s given.', __METHOD__, \is_object($term) ? \get_class($term) : \gettype($term)));
66
        }
67
68
        $this->terms[] = $term;
69
70
        return $this;
71
    }
72
73
    public function setTermsLookup(string $index, string $id, string $path): self
74
    {
75
        $this->lookup = [
76
            'index' => $index,
77
            'id' => $id,
78
            'path' => $path,
79
        ];
80
81
        return $this;
82
    }
83
84
    /**
85
     * {@inheritdoc}
86
     */
87
    public function toArray(): array
88
    {
89
        if (null !== $this->lookup && \count($this->terms)) {
90
            throw new InvalidException('Unable to build Terms query: only one of terms or lookup properties should be set');
91
        }
92
93
        if (null !== $this->lookup) {
94
            $this->setParam($this->field, $this->lookup);
95
        } else {
96
            $this->setParam($this->field, $this->terms);
97
        }
98
99
        return parent::toArray();
100
    }
101
}
102