Skip to content

Commit e83d5c5

Browse files
committed
more annottations
1 parent 11f72d1 commit e83d5c5

File tree

6 files changed

+93
-68
lines changed

6 files changed

+93
-68
lines changed

src/AncestorsRelation.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,14 @@
55
use Illuminate\Database\Eloquent\Model;
66

77
/**
8+
* @template Tmodelkey
9+
* @template Tmodel of Model
10+
*
11+
* @phpstan-type NodeModel Node<Tmodelkey,Tmodel>&Tmodel
12+
*
813
* @disregard P1037
14+
*
15+
* @extends BaseRelation<Tmodelkey,Tmodel>
916
*/
1017
class AncestorsRelation extends BaseRelation
1118
{
@@ -25,8 +32,8 @@ public function addConstraints()
2532
}
2633

2734
/**
28-
* @param Model&Node $model
29-
* @param Node $related
35+
* @param NodeModel $model
36+
* @param NodeModel $related
3037
*
3138
* @return bool
3239
*/
@@ -36,8 +43,8 @@ protected function matches(Model $model, $related): bool
3643
}
3744

3845
/**
39-
* @param QueryBuilder $query
40-
* @param Model $model
46+
* @param QueryBuilder<Tmodelkey,Tmodel> $query
47+
* @param NodeModel $model
4148
*
4249
* @return void
4350
*/

src/BaseRelation.php

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,26 @@
1010

1111
/**
1212
* @template Tmodelkey
13-
* @template Tmodel of Model&Node<Tmodelkey,Model>
13+
* @template Tmodel of Model
1414
*
15-
* @extends Relation<Tmodel>
15+
* @phpstan-type NodeModel Node<Tmodelkey,Tmodel>&Tmodel
16+
*
17+
* @extends Relation<NodeModel>
1618
*
17-
* @property Tmodel $related
18-
* @property Tmodel $parent
19+
* @property NodeModel $related
20+
* @property NodeModel $parent
1921
*
20-
* @method Tmodel getParent()
22+
* @method NodeModel getParent()
2123
*/
2224
abstract class BaseRelation extends Relation
2325
{
2426
/**
25-
* @var QueryBuilder
27+
* @var QueryBuilder<Tmodelkey,Tmodel>
2628
*/
2729
protected $query;
2830

2931
/**
30-
* @var Node&Model
32+
* @var NodeModel
3133
*/
3234
protected $parent;
3335

@@ -41,29 +43,29 @@ abstract class BaseRelation extends Relation
4143
/**
4244
* AncestorsRelation constructor.
4345
*
44-
* @param QueryBuilder $builder
45-
* @param Model $model
46+
* @param QueryBuilder<Tmodelkey,Tmodel> $builder
47+
* @param NodeModel $model
4648
*/
4749
public function __construct(QueryBuilder $builder, Model $model)
4850
{
4951
if (!NestedSet::isNode($model)) {
5052
throw new \InvalidArgumentException('Model must be node.');
5153
}
52-
54+
/** @disregard P1006 */
5355
parent::__construct($builder, $model);
5456
}
5557

5658
/**
57-
* @param Model&Node $model
58-
* @param Node $related
59+
* @param NodeModel $model
60+
* @param NodeModel $related
5961
*
6062
* @return bool
6163
*/
6264
abstract protected function matches(Model&Node $model, Node $related): bool;
6365

6466
/**
65-
* @param QueryBuilder $query
66-
* @param Model $model
67+
* @param QueryBuilder<Tmodelkey,Tmodel> $query
68+
* @param NodeModel $model
6769
*
6870
* @return void
6971
*/
@@ -80,11 +82,11 @@ abstract protected function addEagerConstraint($query, $model);
8082
abstract protected function relationExistenceCondition(string $hash, string $table, string $lft, string $rgt): string;
8183

8284
/**
83-
* @param EloquentBuilder $query
84-
* @param EloquentBuilder $parent
85+
* @param EloquentBuilder<NodeModel> $query
86+
* @param EloquentBuilder<NodeModel> $parent
8587
* @param mixed $columns
8688
*
87-
* @return EloquentBuilder
89+
* @return EloquentBuilder<NodeModel>
8890
*/
8991
public function getRelationExistenceQuery(EloquentBuilder $query, EloquentBuilder $parent,
9092
$columns = ['*']

src/Collection.php

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@
77

88
/**
99
* @template TKey of array-key
10-
* @template TModel of Model&Node
10+
* @template Tmodelkey
11+
* @template Tmodel of Model
1112
*
12-
* @extends EloquentCollection<TKey, TModel>
13+
* @phpstan-type NodeModel Node<Tmodelkey,Tmodel>&Tmodel
14+
*
15+
* @extends EloquentCollection<TKey,NodeModel>
1316
*/
1417
final class Collection extends EloquentCollection
1518
{
@@ -26,17 +29,17 @@ public function linkNodes()
2629
return $this;
2730
}
2831

29-
/** @var Node */
32+
/** @var NodeModel */
3033
$first = $this->first();
3134
$groupedNodes = $this->groupBy($first->getParentIdName());
3235

33-
/** @var Node&Model $node */
36+
/** @var NodeModel $node */
3437
foreach ($this->items as $node) {
3538
if ($node->getParentId() === null) {
3639
$node->setRelation('parent', null);
3740
}
3841

39-
/** @var array<int,Model&Node> */
42+
/** @var array<int,NodeModel> */
4043
$children = $groupedNodes->get($node->getKey(), []);
4144

4245
foreach ($children as $child) {
@@ -58,7 +61,7 @@ public function linkNodes()
5861
*
5962
* @param mixed $root
6063
*
61-
* @return Collection
64+
* @return Collection<TKey,Tmodelkey,Tmodel>
6265
*/
6366
public function toTree($root = false)
6467
{
@@ -72,7 +75,7 @@ public function toTree($root = false)
7275

7376
$root = $this->getRootNodeId($root);
7477

75-
/** @var Model&Node $node */
78+
/** @var NodeModel $node */
7679
foreach ($this->items as $node) {
7780
if ($node->getParentId() === $root) {
7881
$items[] = $node;
@@ -101,7 +104,7 @@ protected function getRootNodeId($root = false)
101104
// least lft value as root node id.
102105
$leastValue = null;
103106

104-
/** @var Model&Node $node */
107+
/** @var NodeModel $node */
105108
foreach ($this->items as $node) {
106109
if ($leastValue === null || $node->getLft() < $leastValue) {
107110
$leastValue = $node->getLft();
@@ -122,7 +125,7 @@ protected function getRootNodeId($root = false)
122125
*
123126
* @param bool $root
124127
*
125-
* @return Collection
128+
* @return Collection<TKey,Tmodelkey,Tmodel>
126129
*/
127130
public function toFlatTree($root = false): Collection
128131
{
@@ -143,10 +146,10 @@ public function toFlatTree($root = false): Collection
143146
/**
144147
* Flatten a tree into a non recursive array.
145148
*
146-
* @param Collection<int|string,TModel> $groupedNodes
149+
* @param Collection<int|string,Tmodelkey,Tmodel> $groupedNodes
147150
* @param int|string $parentId
148151
*
149-
* @return Collection
152+
* @return Collection<TKey,Tmodelkey,Tmodel>
150153
*/
151154
protected function flattenTree(Collection $groupedNodes, $parentId): Collection
152155
{

src/DescendantsRelation.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,14 @@
55
use Illuminate\Database\Eloquent\Model;
66

77
/**
8+
* @template Tmodelkey
9+
* @template Tmodel of Model
10+
*
11+
* @phpstan-type NodeModel Node<Tmodelkey,Tmodel>&Tmodel
12+
*
813
* @disregard P1037
14+
*
15+
* @extends BaseRelation<Tmodelkey,Tmodel>
916
*/
1017
class DescendantsRelation extends BaseRelation
1118
{

0 commit comments

Comments
 (0)