laravel-eloquent-uuid-slug icon indicating copy to clipboard operation
laravel-eloquent-uuid-slug copied to clipboard

Trait doesn't preserves Eloquent model generic when running static analysis

Open khalyomede opened this issue 1 year ago • 0 comments

Running PHPStan on this code will return the error below

$shoppingLists = ShoppingList::with("items")
  ->authorOrMemberMatching($user)
  ->when(
    $sort === ViewOrder::UncompletedFirst->value,
    fn (Builder $query): Builder =>
    $query->withCount(["items" => fn (Builder $item): Builder => $item->uncompleted()])
      ->orderByRaw("(items_count > 0) DESC, updated_at DESC")
  )
  ->when(
    $sort !== ViewOrder::UncompletedFirst->value,
    fn (Builder $query): Builder =>
    $query->orderByDesc("updated_at")
  )
  ->paginate(8)
  ->appends([
    "sort" => $sort,
  ]);
Anonymous function should return Illuminate\Database\Eloquent\Builder<Illuminate\Database\Eloquent\Model> but returns  
  Khalyomede\EloquentUuidSlug\Builder\SluggableBuilder<App\Models\ShoppingList>.                                         
  💡 Template type TModelClass on class Illuminate\Database\Eloquent\Builder is not covariant. Learn more:               
    https://phpstan.org/blog/whats-up-with-template-covariant

khalyomede avatar Jul 30 '23 14:07 khalyomede