laravel/framework

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

Open

#53,292 opened on 2024年10月24日

GitHub で見る
 (12 comments) (0 reactions) (0 assignees)PHP (34,705 stars) (11,882 forks)batch import
help wanted

説明

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.

コントリビューターガイド

Conditional (when helper) gives back Eloquent Builder instance inside the closure instead of the relationship instance · laravel/framework#53292 | Good First Issue