From 784863b3e6bd7f122365facb231e83cfbbf5d92a Mon Sep 17 00:00:00 2001 From: Stephen Cameron Date: Fri, 4 Feb 2022 22:54:42 +0100 Subject: [PATCH] Fix logic issue that occurred when combining `whereVariant` with other `where` clauses in the query builder. WIP #4893 @1.5 --- src/app/Magic/Models/CMSPage.php | 2 +- src/app/Magic/QueryBuilder.php | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/Magic/Models/CMSPage.php b/src/app/Magic/Models/CMSPage.php index 0c824df..f18d687 100644 --- a/src/app/Magic/Models/CMSPage.php +++ b/src/app/Magic/Models/CMSPage.php @@ -226,7 +226,7 @@ class CMSPage extends CubistMagicNestedModel try { $r = DB::table(self::$_table)->orderBy('lft'); if (App::hasVariant()) { - $r->whereRaw('variant IS NULL OR JSON_CONTAINS(variant, \'["' . $variant . '"]\')'); + $r->whereRaw('(variant IS NULL OR JSON_CONTAINS(variant, \'["' . $variant . '"]\'))'); } static::$_pagesList[$variant] = $r->get()->pluck('name', 'id'); } catch (Exception $e) { diff --git a/src/app/Magic/QueryBuilder.php b/src/app/Magic/QueryBuilder.php index ea6c0b5..9386c36 100644 --- a/src/app/Magic/QueryBuilder.php +++ b/src/app/Magic/QueryBuilder.php @@ -13,7 +13,9 @@ class QueryBuilder extends Builder $variant = App::getVariant(); } if (App::hasVariant()) { - return $this->whereRaw('variant IS NULL OR JSON_CONTAINS(variant, \'["' . $variant . '"]\')'); + // Raw WHERE statement containing an OR clause must be wrapped in parentheses to contain the logic. + // Otherwise, it will cause unexpected results when used with other WHERE statements in the QueryBuilder + return $this->whereRaw('(variant IS NULL OR JSON_CONTAINS(variant, \'["' . $variant . '"]\'))'); } return $this; } -- 2.39.5