laravel/framework

Inconsistent orWhere behavior after upgrade from Laravel 10.x to 13.x

Open

#59,516 创建于 2026年4月3日

在 GitHub 查看
 (4 评论) (0 反应) (0 负责人)PHP (34,705 star) (11,882 fork)batch import
help wanted

描述

Laravel Version

v13.2.0

PHP Version

8.3.30

Database Driver & Version

mariadb Ver 15.1 on arm64 (Homebrew)

Description

When doing something along the lines of:

$query
                        ->where([
                            ['source_type', '=', Role::class],
                            ['source_id', '=', $obj->guestRole->id],
                        ])
                        ->orWhere([
                            ['source_type', '=', Group::class],
                            ['source_id', '=', $obj->loggedOutGroup->id],
                        ]);

previously, it would generate a conditional with:

(source_type=? AND source_id=?) OR (source_type=? AND source_id=?)

After the upgrade to Laravel 13 it's now generating the following conditional (note the OR in the second block):

(source_type=? AND source_id=?) OR (source_type=? OR source_id=?)

While looking into this I discovered #53184 from 11.28 causing this issue. However, it says it was fixed in #53197 but I'm still seeing this behavior in 13.x

Steps To Reproduce

$query
                        ->where([
                            ['source_type', '=', Role::class],
                            ['source_id', '=', $obj->guestRole->id],
                        ])
                        ->orWhere([
                            ['source_type', '=', Group::class],
                            ['source_id', '=', $obj->loggedOutGroup->id],
                        ]);

Use this as a conditional

贡献者指南