77use Illuminate \Database \Eloquent \Model ;
88use Illuminate \Database \Eloquent \Relations \Relation ;
99use Illuminate \Database \Query \Builder ;
10+ use Kalnoy \Nestedset \Contracts \NestedSetCollection ;
11+ use Kalnoy \Nestedset \Contracts \Node ;
12+ use Kalnoy \Nestedset \Contracts \NodeQueryBuilder ;
1013
1114/**
1215 * @template Tmodel of Model
1316 *
14- * @phpstan-type NodeModel Node<Tmodel>&Tmodel
17+ * @phpstan-type NodeModel Node<Tmodel>&Tmodel
1518 *
16- * @extends Relation<NodeModel,NodeModel,EloquentCollection<int,NodeModel >>
19+ * @extends Relation<NodeModel,NodeModel,NestedSetCollection<Tmodel >>
1720 *
1821 * @property NodeModel $related
1922 * @property NodeModel $parent
20- *
21- * @method NodeModel getParent()
2223 */
2324abstract class BaseRelation extends Relation
2425{
2526 /**
26- * @var QueryBuilder <Tmodel>
27+ * @var NodeQueryBuilder <Tmodel>
2728 */
2829 protected $ query ;
2930
@@ -42,8 +43,8 @@ abstract class BaseRelation extends Relation
4243 /**
4344 * AncestorsRelation constructor.
4445 *
45- * @param QueryBuilder<Tmodel > $builder
46- * @param NodeModel $model
46+ * @param QueryBuilder<NodeModel > $builder
47+ * @param NodeModel $model
4748 */
4849 public function __construct (QueryBuilder $ builder , Model $ model )
4950 {
@@ -60,11 +61,11 @@ public function __construct(QueryBuilder $builder, Model $model)
6061 *
6162 * @return bool
6263 */
63- abstract protected function matches (Model & Node $ model , Node $ related ): bool ;
64+ abstract protected function matches (Node $ model , Node $ related ): bool ;
6465
6566 /**
66- * @param QueryBuilder <Tmodel> $query
67- * @param NodeModel $model
67+ * @param NodeQueryBuilder <Tmodel> $query
68+ * @param NodeModel $model
6869 *
6970 * @return void
7071 */
@@ -90,6 +91,7 @@ abstract protected function relationExistenceCondition(string $hash, string $tab
9091 public function getRelationExistenceQuery (EloquentBuilder $ query , EloquentBuilder $ parentQuery ,
9192 $ columns = ['* ' ],
9293 ) {
94+ /** @disregard P1006 */
9395 $ query = $ this ->getParent ()->replicate ()->newScopedQuery ()->select ($ columns );
9496
9597 $ table = $ query ->getModel ()->getTable ();
@@ -106,7 +108,7 @@ public function getRelationExistenceQuery(EloquentBuilder $query, EloquentBuilde
106108 $ grammar ->wrap ($ this ->parent ->getLftName ()),
107109 $ grammar ->wrap ($ this ->parent ->getRgtName ()));
108110
109- return $ query ->whereRaw ($ condition ); /** @phpstan-ignore-line */
111+ return $ query ->whereRaw ($ condition );
110112 }
111113
112114 /**
@@ -137,11 +139,11 @@ public function getRelationCountHash($incrementJoinCount = true)
137139 /**
138140 * Get the results of the relationship.
139141 *
140- * @return Collection <NodeModel>
142+ * @return NestedSetCollection <NodeModel>
141143 */
142144 public function getResults ()
143145 {
144- /** @var Collection<NodeModel> */
146+ /** @disregard P1013 */
145147 $ result = $ this ->query ->get ();
146148
147149 return $ result ;
@@ -164,6 +166,7 @@ public function addEagerConstraints(array $models)
164166 $ this ->query ->whereNested (function (Builder $ inner ) use ($ models ) {
165167 // We will use this query in order to apply constraints to the
166168 // base query builder
169+ /** @disregard P1013 */
167170 $ outer = $ this ->parent ->newQuery ()->setQuery ($ inner );
168171
169172 foreach ($ models as $ model ) {
@@ -187,6 +190,7 @@ public function match(array $models, EloquentCollection $results, $relation)
187190 /** @disregard P1006 */
188191 $ related = $ this ->matchForModel ($ model , $ results );
189192
193+ /** @disregard P1013 */
190194 $ model ->setRelation ($ relation , $ related );
191195 }
192196
@@ -197,16 +201,16 @@ public function match(array $models, EloquentCollection $results, $relation)
197201 * @param NodeModel $model
198202 * @param EloquentCollection<int,NodeModel> $results
199203 *
200- * @return Collection <Tmodel>
204+ * @return NestedSetCollection <Tmodel>
201205 */
202206 protected function matchForModel (Model $ model , EloquentCollection $ results )
203207 {
204- /** @var Collection<Tmodel> */
205208 $ result = $ this ->related ->newCollection ();
206209
207210 foreach ($ results as $ related ) {
208211 /** @disregard P1006 */
209212 if ($ this ->matches ($ model , $ related )) {
213+ /** @disregard P1013 */
210214 $ result ->push ($ related );
211215 }
212216 }
0 commit comments