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