77use Illuminate \Database \Eloquent \Model ;
88use Illuminate \Database \Eloquent \Relations \Relation ;
99use Illuminate \Database \Query \Builder ;
10+ use Kalnoy \Nestedset \Contracts \Node ;
11+ use Kalnoy \Nestedset \Contracts \NodeQueryBuilder ;
12+ use Kalnoy \Nestedset \Contracts \NestedSetCollection ;
1013
1114/**
1215 * @template Tmodel of Model
1316 *
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>>>
1719 *
1820 * @property NodeModel $related
1921 * @property NodeModel $parent
20- *
21- * @method NodeModel getParent()
2222 */
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)
2424{
2525 /**
26- * @var QueryBuilder <Tmodel>
26+ * @var NodeQueryBuilder <Tmodel>
2727 */
2828 protected $ query ;
2929
@@ -60,10 +60,10 @@ public function __construct(QueryBuilder $builder, Model $model)
6060 *
6161 * @return bool
6262 */
63- abstract protected function matches (Model & Node $ model , Node $ related ): bool ;
63+ abstract protected function matches (Node $ model , Node $ related ): bool ;
6464
6565 /**
66- * @param QueryBuilder <Tmodel> $query
66+ * @param NodeQueryBuilder <Tmodel> $query
6767 * @param NodeModel $model
6868 *
6969 * @return void
@@ -90,6 +90,7 @@ abstract protected function relationExistenceCondition(string $hash, string $tab
9090 public function getRelationExistenceQuery (EloquentBuilder $ query , EloquentBuilder $ parentQuery ,
9191 $ columns = ['* ' ],
9292 ) {
93+ /** @disregard P1006 */
9394 $ query = $ this ->getParent ()->replicate ()->newScopedQuery ()->select ($ columns );
9495
9596 $ table = $ query ->getModel ()->getTable ();
@@ -106,7 +107,7 @@ public function getRelationExistenceQuery(EloquentBuilder $query, EloquentBuilde
106107 $ grammar ->wrap ($ this ->parent ->getLftName ()),
107108 $ grammar ->wrap ($ this ->parent ->getRgtName ()));
108109
109- return $ query ->whereRaw ($ condition ); /** @phpstan-ignore-line */
110+ return $ query ->whereRaw ($ condition );
110111 }
111112
112113 /**
@@ -137,11 +138,11 @@ public function getRelationCountHash($incrementJoinCount = true)
137138 /**
138139 * Get the results of the relationship.
139140 *
140- * @return Collection <NodeModel>
141+ * @return NestedSetCollection <NodeModel>
141142 */
142143 public function getResults ()
143144 {
144- /** @var Collection<NodeModel> */
145+ /** @disregard P1013 */
145146 $ result = $ this ->query ->get ();
146147
147148 return $ result ;
@@ -164,6 +165,7 @@ public function addEagerConstraints(array $models)
164165 $ this ->query ->whereNested (function (Builder $ inner ) use ($ models ) {
165166 // We will use this query in order to apply constraints to the
166167 // base query builder
168+ /** @disregard P1013 */
167169 $ outer = $ this ->parent ->newQuery ()->setQuery ($ inner );
168170
169171 foreach ($ models as $ model ) {
@@ -187,6 +189,7 @@ public function match(array $models, EloquentCollection $results, $relation)
187189 /** @disregard P1006 */
188190 $ related = $ this ->matchForModel ($ model , $ results );
189191
192+ /** @disregard P1013 */
190193 $ model ->setRelation ($ relation , $ related );
191194 }
192195
@@ -197,16 +200,16 @@ public function match(array $models, EloquentCollection $results, $relation)
197200 * @param NodeModel $model
198201 * @param EloquentCollection<int,NodeModel> $results
199202 *
200- * @return Collection <Tmodel>
203+ * @return NestedSetCollection <Tmodel>
201204 */
202205 protected function matchForModel (Model $ model , EloquentCollection $ results )
203206 {
204- /** @var Collection<Tmodel> */
205207 $ result = $ this ->related ->newCollection ();
206208
207209 foreach ($ results as $ related ) {
208210 /** @disregard P1006 */
209211 if ($ this ->matches ($ model , $ related )) {
212+ /** @disregard P1013 */
210213 $ result ->push ($ related );
211214 }
212215 }
0 commit comments