Skip to content

Commit 53d60b6

Browse files
Merge release 2.2.5 into 3.0.x (#218)
1 parent 352887a commit 53d60b6

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/Rules/NoDynamicWhereRule.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,17 @@ private function findModel(ClassReflection $calledOnReflection): string|null
155155
$calledOnReflection->getName() === EloquentBuilder::class ||
156156
$calledOnReflection->isSubclassOf(EloquentBuilder::class)
157157
) {
158-
$modelType = $calledOnReflection->getActiveTemplateTypeMap()->getType('TModelClass');
158+
if ($calledOnReflection->isGeneric()) {
159+
$modelType = $calledOnReflection->getActiveTemplateTypeMap()->getType('TModelClass') ??
160+
$calledOnReflection->getActiveTemplateTypeMap()->getType('TModel');
161+
} elseif ($calledOnReflection->getParentClass() !== null) {
162+
$parent = $calledOnReflection->getParentClass();
163+
164+
$modelType = $parent->getActiveTemplateTypeMap()->getType('TModelClass') ??
165+
$parent->getActiveTemplateTypeMap()->getType('TModel');
166+
} else {
167+
$modelType = null;
168+
}
159169

160170
if (! $modelType instanceof ObjectType) {
161171
return null;

tests/Rules/data/dynamic-where.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,22 @@ public function hasActiveActions(): bool
158158

159159
class AccountAction extends Model
160160
{
161+
/**
162+
* @param Builder<AccountAction> $query
163+
*
164+
* @return Builder<AccountAction>
165+
*/
161166
public function scopeWhereActive(Builder $query): Builder
162167
{
163168
return $query->where('is_active', true);
164169
}
165170
}
171+
172+
/** @extends Builder<AccountAction> */
173+
class SomeBuilder extends Builder
174+
{
175+
public function doFoo(): void
176+
{
177+
$this->whereActive();
178+
}
179+
}

0 commit comments

Comments
 (0)