1: <?php
2:
3: namespace Baril\Sqlout;
4:
5: use Closure;
6: use Laravel\Scout\Builder as ScoutBuilder;
7:
8: class Builder extends ScoutBuilder
9: {
10: public const NATURAL_LANGUAGE = 'in natural language mode';
11: public const QUERY_EXPANSION = 'in natural language mode with query expansion';
12: public const BOOLEAN = 'in boolean mode';
13:
14: /**
15: * The search mode (one of the consts above).
16: *
17: * @var string
18: */
19: public $mode;
20:
21: /**
22: * The array of scopes that will be applied to the model query.
23: *
24: * @var array
25: */
26: public $scopes = [];
27:
28: public function __call($method, $parameters)
29: {
30: if (static::hasMacro($method)) {
31: return parent::__call($method, $parameters);
32: }
33:
34: $this->scopes[] = [$method, $parameters];
35: return $this;
36: }
37:
38: /**
39: * @deprecated Will be removed in next major version, use Scout's $builder->query($callback) instead.
40: */
41: public function scope(Closure $callback)
42: {
43: $this->scopes[] = $callback;
44: return $this;
45: }
46:
47: /**
48: * Order the query by score.
49: *
50: * @param string $direction
51: * @return $this
52: */
53: public function orderByScore($direction = 'desc')
54: {
55: return $this->orderBy('_score', $direction);
56: }
57:
58: /**
59: * Restrict the search to the provided field(s).
60: *
61: * @param string|array|\Illuminate\Contracts\Support\Arrayable $fields
62: * @return $this
63: */
64: public function only($fields)
65: {
66: return parent::where('field', $fields);
67: }
68:
69: /**
70: * Switches to the provided mode.
71: *
72: * @param string $mode
73: * @return $this
74: */
75: public function mode($mode)
76: {
77: $this->mode = trim(strtolower($mode));
78: return $this;
79: }
80:
81: /**
82: * Switches to natural language mode.
83: *
84: * @param string $mode
85: * @return $this
86: */
87: public function inNaturalLanguageMode()
88: {
89: return $this->mode(static::NATURAL_LANGUAGE);
90: }
91:
92: /**
93: * Switches to natural language mode with query expansion.
94: *
95: * @param string $mode
96: * @return $this
97: */
98: public function withQueryExpansion()
99: {
100: return $this->mode(static::QUERY_EXPANSION);
101: }
102:
103: /**
104: * Switches to boolean mode.
105: *
106: * @param string $mode
107: * @return $this
108: */
109: public function inBooleanMode()
110: {
111: return $this->mode(static::BOOLEAN);
112: }
113:
114: /**
115: * Returns the total number of hits
116: *
117: * @return int
118: */
119: public function count()
120: {
121: return $this->engine()->getTotalCount(
122: $this->engine()->search($this)
123: );
124: }
125: }
126: