7
7
use Illuminate \Database \Eloquent \Model ;
8
8
use Illuminate \Database \Eloquent \Relations \Relation ;
9
9
use Illuminate \Database \Query \Builder ;
10
+ use Kalnoy \Nestedset \Contracts \NestedSetCollection ;
11
+ use Kalnoy \Nestedset \Contracts \Node ;
12
+ use Kalnoy \Nestedset \Contracts \NodeQueryBuilder ;
10
13
11
14
/**
12
15
* @template Tmodel of Model
13
16
*
14
- * @phpstan-type NodeModel Node<Tmodel>&Tmodel
17
+ * @phpstan-type NodeModel Node<Tmodel>&Tmodel
15
18
*
16
- * @extends Relation<NodeModel,NodeModel,EloquentCollection<int,NodeModel >>
19
+ * @extends Relation<NodeModel,NodeModel,NestedSetCollection<Tmodel >>
17
20
*
18
21
* @property NodeModel $related
19
22
* @property NodeModel $parent
20
- *
21
- * @method NodeModel getParent()
22
23
*/
23
24
abstract class BaseRelation extends Relation
24
25
{
25
26
/**
26
- * @var QueryBuilder <Tmodel>
27
+ * @var NodeQueryBuilder <Tmodel>
27
28
*/
28
29
protected $ query ;
29
30
@@ -42,8 +43,8 @@ abstract class BaseRelation extends Relation
42
43
/**
43
44
* AncestorsRelation constructor.
44
45
*
45
- * @param QueryBuilder<Tmodel > $builder
46
- * @param NodeModel $model
46
+ * @param QueryBuilder<NodeModel > $builder
47
+ * @param NodeModel $model
47
48
*/
48
49
public function __construct (QueryBuilder $ builder , Model $ model )
49
50
{
@@ -60,11 +61,11 @@ public function __construct(QueryBuilder $builder, Model $model)
60
61
*
61
62
* @return bool
62
63
*/
63
- abstract protected function matches (Model & Node $ model , Node $ related ): bool ;
64
+ abstract protected function matches (Node $ model , Node $ related ): bool ;
64
65
65
66
/**
66
- * @param QueryBuilder <Tmodel> $query
67
- * @param NodeModel $model
67
+ * @param NodeQueryBuilder <Tmodel> $query
68
+ * @param NodeModel $model
68
69
*
69
70
* @return void
70
71
*/
@@ -90,6 +91,7 @@ abstract protected function relationExistenceCondition(string $hash, string $tab
90
91
public function getRelationExistenceQuery (EloquentBuilder $ query , EloquentBuilder $ parentQuery ,
91
92
$ columns = ['* ' ],
92
93
) {
94
+ /** @disregard P1006 */
93
95
$ query = $ this ->getParent ()->replicate ()->newScopedQuery ()->select ($ columns );
94
96
95
97
$ table = $ query ->getModel ()->getTable ();
@@ -106,7 +108,7 @@ public function getRelationExistenceQuery(EloquentBuilder $query, EloquentBuilde
106
108
$ grammar ->wrap ($ this ->parent ->getLftName ()),
107
109
$ grammar ->wrap ($ this ->parent ->getRgtName ()));
108
110
109
- return $ query ->whereRaw ($ condition ); /** @phpstan-ignore-line */
111
+ return $ query ->whereRaw ($ condition );
110
112
}
111
113
112
114
/**
@@ -137,11 +139,11 @@ public function getRelationCountHash($incrementJoinCount = true)
137
139
/**
138
140
* Get the results of the relationship.
139
141
*
140
- * @return Collection <NodeModel>
142
+ * @return NestedSetCollection <NodeModel>
141
143
*/
142
144
public function getResults ()
143
145
{
144
- /** @var Collection<NodeModel> */
146
+ /** @disregard P1013 */
145
147
$ result = $ this ->query ->get ();
146
148
147
149
return $ result ;
@@ -164,6 +166,7 @@ public function addEagerConstraints(array $models)
164
166
$ this ->query ->whereNested (function (Builder $ inner ) use ($ models ) {
165
167
// We will use this query in order to apply constraints to the
166
168
// base query builder
169
+ /** @disregard P1013 */
167
170
$ outer = $ this ->parent ->newQuery ()->setQuery ($ inner );
168
171
169
172
foreach ($ models as $ model ) {
@@ -187,6 +190,7 @@ public function match(array $models, EloquentCollection $results, $relation)
187
190
/** @disregard P1006 */
188
191
$ related = $ this ->matchForModel ($ model , $ results );
189
192
193
+ /** @disregard P1013 */
190
194
$ model ->setRelation ($ relation , $ related );
191
195
}
192
196
@@ -197,16 +201,16 @@ public function match(array $models, EloquentCollection $results, $relation)
197
201
* @param NodeModel $model
198
202
* @param EloquentCollection<int,NodeModel> $results
199
203
*
200
- * @return Collection <Tmodel>
204
+ * @return NestedSetCollection <Tmodel>
201
205
*/
202
206
protected function matchForModel (Model $ model , EloquentCollection $ results )
203
207
{
204
- /** @var Collection<Tmodel> */
205
208
$ result = $ this ->related ->newCollection ();
206
209
207
210
foreach ($ results as $ related ) {
208
211
/** @disregard P1006 */
209
212
if ($ this ->matches ($ model , $ related )) {
213
+ /** @disregard P1013 */
210
214
$ result ->push ($ related );
211
215
}
212
216
}
0 commit comments