laravel/framework

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

Open

#59516 opened on Apr 3, 2026

View on GitHub
 (4 comments) (0 reactions) (0 assignees)PHP (34,705 stars) (11,882 forks)batch import
help wanted

Description

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

Contributor guide