From 28fd698871a2ed60c0601cd35c8ae2d18b0d49d8 Mon Sep 17 00:00:00 2001 From: brandonkelly Date: Fri, 4 Sep 2026 15:43:26 -0700 Subject: [PATCH] modifyQuery() can return void --- src/Field/Addresses.php | 8 +++++--- src/Field/BaseOptionsField.php | 16 ++++++++++------ src/Field/BaseRelationField.php | 9 ++++----- src/Field/Contracts/FieldInterface.php | 8 +------- src/Field/Date.php | 4 ++-- src/Field/Field.php | 6 +++--- src/Field/Lightswitch.php | 4 ++-- src/Field/Matrix.php | 8 +++++--- src/Field/Money.php | 4 ++-- src/Field/Number.php | 4 ++-- src/Field/Range.php | 4 ++-- .../Queries/Concerns/QueriesCustomFieldsTest.php | 4 ++-- .../Field/Concerns/LegacyFieldConstants.php | 10 +++++----- 13 files changed, 45 insertions(+), 44 deletions(-) diff --git a/src/Field/Addresses.php b/src/Field/Addresses.php index 943b73b34ae..cfa93caf942 100644 --- a/src/Field/Addresses.php +++ b/src/Field/Addresses.php @@ -114,7 +114,7 @@ public static function dbType(): array|string|null } #[Override] - public static function modifyQuery(Builder $query, array $instances, mixed $value): Builder + public static function modifyQuery(Builder $query, array $instances, mixed $value): void { /** @var self $field */ $field = reset($instances); @@ -133,7 +133,9 @@ public static function modifyQuery(Builder $query, array $instances, mixed $valu } if ($value === ':empty:') { - return $query->whereNotExists($exists); + $query->whereNotExists($exists); + + return; } if ($value !== ':notempty:') { @@ -147,7 +149,7 @@ public static function modifyQuery(Builder $query, array $instances, mixed $valu $exists->whereIn("addresses_$ns.id", $ids); } - return $query->whereExists($exists); + $query->whereExists($exists); } /** diff --git a/src/Field/BaseOptionsField.php b/src/Field/BaseOptionsField.php index 5bdf632b5ef..eedc7925eb4 100644 --- a/src/Field/BaseOptionsField.php +++ b/src/Field/BaseOptionsField.php @@ -91,16 +91,18 @@ public static function dbType(): string } #[Override] - public static function modifyQuery(Builder $query, array $instances, mixed $value): Builder + public static function modifyQuery(Builder $query, array $instances, mixed $value): void { if (! static::$multi) { - return parent::modifyQuery($query, $instances, $value); + parent::modifyQuery($query, $instances, $value); + + return; } $param = QueryParam::parse($value); if (empty($param->values)) { - return $query; + return; } if ($param->operator === QueryParam::NOT) { @@ -113,7 +115,7 @@ public static function modifyQuery(Builder $query, array $instances, mixed $valu $valueSql = self::valueColumn($instances); if ($valueSql === null) { - return $query; + return; } $isEmptyValueParam = fn (mixed $value): bool => is_string($value) && @@ -134,13 +136,15 @@ public static function modifyQuery(Builder $query, array $instances, mixed $valu }; if ($negate && Collection::make($param->values)->doesntContain($isEmptyValueParam)) { - return $query->where(function (Builder $query) use ($valueSql, $applyConditions) { + $query->where(function (Builder $query) use ($valueSql, $applyConditions) { $query->whereNull($valueSql) ->orWhereNot($applyConditions); }); + + return; } - return $query->where($applyConditions, boolean: $negate ? 'and not' : 'and'); + $query->where($applyConditions, boolean: $negate ? 'and not' : 'and'); } /** @param list $instances */ diff --git a/src/Field/BaseRelationField.php b/src/Field/BaseRelationField.php index ee696684406..7c9b3fb8686 100644 --- a/src/Field/BaseRelationField.php +++ b/src/Field/BaseRelationField.php @@ -65,6 +65,7 @@ use CraftCms\Cms\View\LegacyAssets\InternalAssetRegistry; use GraphQL\Type\Definition\InputObjectField; use GraphQL\Type\Definition\Type; +use Illuminate\Contracts\Database\Query\Builder as BuilderInterface; use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\JoinClause; use Illuminate\Support\Collection; @@ -146,7 +147,7 @@ public static function dbType(): array|string|null } #[Override] - public static function modifyQuery(\Illuminate\Contracts\Database\Query\Builder $query, array $instances, mixed $value): \Illuminate\Contracts\Database\Query\Builder + public static function modifyQuery(BuilderInterface $query, array $instances, mixed $value): void { /** @var self $field */ $field = reset($instances); @@ -204,19 +205,17 @@ public static function modifyQuery(\Illuminate\Contracts\Database\Query\Builder if ($query instanceof ElementQuery) { $filter->apply($query->getQuery(), $relationCriteria, $siteId !== '*' ? $siteId : null); - return $query; + return; } if ($query instanceof Builder) { $filter->apply($query, $relationCriteria); - return $query; + return; } $query->where(fn (Builder $query) => $filter->apply($query, $relationCriteria)); } - - return $query; } /** diff --git a/src/Field/Contracts/FieldInterface.php b/src/Field/Contracts/FieldInterface.php index c87e740cea1..7b15cce9f58 100644 --- a/src/Field/Contracts/FieldInterface.php +++ b/src/Field/Contracts/FieldInterface.php @@ -168,17 +168,11 @@ public static function dbType(): array|string|null; /** * Applies a condition to the query builder for the given field instances, for a user-provided param value. * - * If `false` is returned, an always-false condition will be used. - * * @param Builder $query The query instance to modify * @param static[] $instances The field instances to search * @param mixed $value The user-supplied param value */ - public static function modifyQuery( - Builder $query, - array $instances, - mixed $value, - ): Builder; + public static function modifyQuery(Builder $query, array $instances, mixed $value): void; /** * Returns the orientation the field should use (`ltr` or `rtl`). diff --git a/src/Field/Date.php b/src/Field/Date.php index cbdbcfdaed3..c2141dda960 100644 --- a/src/Field/Date.php +++ b/src/Field/Date.php @@ -72,11 +72,11 @@ public static function dbType(): array } #[Override] - public static function modifyQuery(Builder $query, array $instances, mixed $value): Builder + public static function modifyQuery(Builder $query, array $instances, mixed $value): void { $valueSql = self::valueSql($instances); - return $query->whereDateParam($valueSql, $value); + $query->whereDateParam($valueSql, $value); } /** diff --git a/src/Field/Field.php b/src/Field/Field.php index 851424e3d32..a76af23cd1c 100644 --- a/src/Field/Field.php +++ b/src/Field/Field.php @@ -352,12 +352,12 @@ public static function dbType(): array|string|null return Query::TYPE_TEXT; } - public static function modifyQuery(Builder $query, array $instances, mixed $value): Builder + public static function modifyQuery(Builder $query, array $instances, mixed $value): void { $valueSql = static::valueSql($instances); if ($valueSql === null) { - return $query; + return; } $caseInsensitive = false; @@ -367,7 +367,7 @@ public static function modifyQuery(Builder $query, array $instances, mixed $valu $value = $value['value']; } - return $query->whereParam( + $query->whereParam( column: $valueSql, param: $value, caseInsensitive: $caseInsensitive, diff --git a/src/Field/Lightswitch.php b/src/Field/Lightswitch.php index fd35dc3df02..0fcf8268af9 100644 --- a/src/Field/Lightswitch.php +++ b/src/Field/Lightswitch.php @@ -66,7 +66,7 @@ public static function dbType(): string } #[Override] - public static function modifyQuery(Builder $query, array $instances, mixed $value): Builder + public static function modifyQuery(Builder $query, array $instances, mixed $value): void { $valueSql = self::valueSql($instances); $strict = false; @@ -78,7 +78,7 @@ public static function modifyQuery(Builder $query, array $instances, mixed $valu $defaultValue = $strict ? null : $instances[0]->default; - return $query->whereBooleanParam($valueSql, $value, $defaultValue, Query::TYPE_JSON); + $query->whereBooleanParam($valueSql, $value, $defaultValue, Query::TYPE_JSON); } /** diff --git a/src/Field/Matrix.php b/src/Field/Matrix.php index ecb09c82c02..666b98408bd 100644 --- a/src/Field/Matrix.php +++ b/src/Field/Matrix.php @@ -143,7 +143,7 @@ public static function dbType(): array|string|null } #[Override] - public static function modifyQuery(Builder $query, array $instances, mixed $value): Builder + public static function modifyQuery(Builder $query, array $instances, mixed $value): void { /** @var self $field */ $field = reset($instances); @@ -162,7 +162,9 @@ public static function modifyQuery(Builder $query, array $instances, mixed $valu } if ($value === ':empty:') { - return $query->whereNotExists($exists); + $query->whereNotExists($exists); + + return; } if ($value !== ':notempty:') { @@ -176,7 +178,7 @@ public static function modifyQuery(Builder $query, array $instances, mixed $valu $exists->whereIn("entries_$ns.id", $ids); } - return $query->whereExists($exists); + $query->whereExists($exists); } /** diff --git a/src/Field/Money.php b/src/Field/Money.php index 483b7739e9a..3f097929202 100644 --- a/src/Field/Money.php +++ b/src/Field/Money.php @@ -197,11 +197,11 @@ public static function dbType(): string } #[Override] - public static function modifyQuery(Builder $query, array $instances, mixed $value): Builder + public static function modifyQuery(Builder $query, array $instances, mixed $value): void { $valueSql = self::valueSql($instances); - return $query->whereMoneyParam($valueSql, $instances[0]->currency, $value); + $query->whereMoneyParam($valueSql, $instances[0]->currency, $value); } public function getDefaultValue(): float|int|null diff --git a/src/Field/Number.php b/src/Field/Number.php index 851576dab80..15ff55f909e 100644 --- a/src/Field/Number.php +++ b/src/Field/Number.php @@ -80,11 +80,11 @@ public static function dbType(): string } #[Override] - public static function modifyQuery(Builder $query, array $instances, mixed $value): Builder + public static function modifyQuery(Builder $query, array $instances, mixed $value): void { $valueSql = self::valueSql($instances); - return $query->whereNumericParam($valueSql, $value, columnType: self::dbType()); + $query->whereNumericParam($valueSql, $value, columnType: self::dbType()); } #[Override] diff --git a/src/Field/Range.php b/src/Field/Range.php index fb609daf437..62f1d04fc31 100644 --- a/src/Field/Range.php +++ b/src/Field/Range.php @@ -82,11 +82,11 @@ public static function dbType(): string } #[Override] - public static function modifyQuery(Builder $query, array $instances, mixed $value): Builder + public static function modifyQuery(Builder $query, array $instances, mixed $value): void { $valueSql = self::valueSql($instances); - return $query->whereNumericParam($valueSql, $value, columnType: self::dbType()); + $query->whereNumericParam($valueSql, $value, columnType: self::dbType()); } /** diff --git a/tests/Feature/Element/Queries/Concerns/QueriesCustomFieldsTest.php b/tests/Feature/Element/Queries/Concerns/QueriesCustomFieldsTest.php index 0cb12aa2cdf..bc808121365 100644 --- a/tests/Feature/Element/Queries/Concerns/QueriesCustomFieldsTest.php +++ b/tests/Feature/Element/Queries/Concerns/QueriesCustomFieldsTest.php @@ -21,7 +21,7 @@ class TestActiveQueryField extends PlainText public static bool $throw = false; #[Override] - public static function modifyQuery(Builder $query, array $instances, mixed $value): Builder + public static function modifyQuery(Builder $query, array $instances, mixed $value): void { self::$activeQueryDuringModify = ElementQuery::$activeQuery; @@ -29,7 +29,7 @@ public static function modifyQuery(Builder $query, array $instances, mixed $valu throw new RuntimeException('Active query failure.'); } - return parent::modifyQuery($query, $instances, $value); + parent::modifyQuery($query, $instances, $value); } public static function reset(): void diff --git a/yii2-adapter/constants/Field/Concerns/LegacyFieldConstants.php b/yii2-adapter/constants/Field/Concerns/LegacyFieldConstants.php index f9c67c6ee7c..b697027c332 100644 --- a/yii2-adapter/constants/Field/Concerns/LegacyFieldConstants.php +++ b/yii2-adapter/constants/Field/Concerns/LegacyFieldConstants.php @@ -47,7 +47,7 @@ use CraftCms\Cms\Field\Events\InputOptionsResolving; use CraftCms\Cms\Field\LinkTypes; use CraftCms\Cms\Field\LinkTypes\Url; -use Illuminate\Database\Query\Builder; +use Illuminate\Contracts\Database\Query\Builder; use Illuminate\Support\Facades\Event; use yii\base\InvalidConfigException; use yii\validators\Validator; @@ -441,10 +441,10 @@ public function validateCustomFieldAttribute(string $attribute, ?array $params = // Other compatibility methods - public static function modifyQuery(Builder $query, array $instances, mixed $value): Builder + public static function modifyQuery(Builder $query, array $instances, mixed $value): void { if (!method_exists(static::class, 'queryCondition')) { - return $query; + return; } $params = []; @@ -452,7 +452,7 @@ public static function modifyQuery(Builder $query, array $instances, mixed $valu $condition = static::queryCondition($instances, $value, $params); if ($condition === null || $condition === false) { - return $query; + return; } $db = Craft::$app->getDb(); @@ -461,7 +461,7 @@ public static function modifyQuery(Builder $query, array $instances, mixed $valu // Yii uses named parameters, Laravel uses positional $sql = preg_replace('/:qp\d+/', '?', $sql); - return $query->whereRaw($sql, array_values($params)); + $query->whereRaw($sql, array_values($params)); } public function getElementValidationRules(): array