Skip to content

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

@JakeBooher

Description

@JakeBooher

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions