laravel/framework

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

Open

#53,292 创建于 2024年10月24日

在 GitHub 查看
 (12 评论) (0 反应) (0 负责人)PHP (34,705 star) (11,882 fork)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.

贡献者指南