laravel/framework

Conditional (when helper) gives back Eloquent Builder instance inside the closure instead of the relationship instance

Offen

#53.292 geöffnet am 24.10.2024

 (12 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)PHP (11.951 Forks)batch import
help wanted

Repository-Metriken

Stars
 (34.869 Sterne)
PR-Merge-Metriken
 (Durchschn. Merge 1T 22h) (129 gemergte PRs in 30 T)

Beschreibung

Laravel Version

11.28.1

PHP Version

8.3

Database Driver & Version

No response

Description

Inside the when closure you will not get a relationship instance, so any specific relationship function will not be available.

Expected: $query to be BelongsToMany instance

Actual: $query is a Illuminate\Database\Eloquent\Builder instance

Ex. BelongsToMany relationships, here you will not be able to call the wherePivot*-methods.

return MyModel::find(2)
->someRelationship()
->when(true, function($query) {
        logger($query::class); // Illuminate\Database\Eloquent\Builder

        $query->wherePivotBetween('updated_at', ['2000-05-05', '2024-05-05']); 
    return $query;
})->get();

Steps To Reproduce

Create a model any kind of relationship and and fire a query that uses the relationship. Like in the example above.

Contributor Guide