From c3947e6f8e11d4c58b695820523175bbe15a9e77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20H=C3=A4drich?= <11225821+shaedrich@users.noreply.github.com> Date: Fri, 21 Feb 2025 15:30:05 +0100 Subject: [PATCH 1/4] Add Model::query($fetchModes) syntactic sugar --- src/Illuminate/Database/Eloquent/Model.php | 31 +++++++++++++--------- src/Illuminate/Database/Query/Builder.php | 8 +----- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/Illuminate/Database/Eloquent/Model.php b/src/Illuminate/Database/Eloquent/Model.php index 44878f7bf880..53e5fbb7e218 100644 --- a/src/Illuminate/Database/Eloquent/Model.php +++ b/src/Illuminate/Database/Eloquent/Model.php @@ -1506,43 +1506,48 @@ protected function performDeleteOnModel() /** * Begin querying the model. * + * @param array|null $fetchModes * @return \Illuminate\Database\Eloquent\Builder */ - public static function query() + public static function query(?array $fetchModes = []) { - return (new static)->newQuery(); + return (new static)->newQuery($fetchModes); } /** * Get a new query builder for the model's table. * + * @param array|null $fetchModes * @return \Illuminate\Database\Eloquent\Builder */ - public function newQuery() + public function newQuery(?array $fetchModes = []) { - return $this->registerGlobalScopes($this->newQueryWithoutScopes()); + return $this->registerGlobalScopes($this->newQueryWithoutScopes($fetchModes)); } /** * Get a new query builder that doesn't have any global scopes or eager loading. * + * @param array|null $fetchModes * @return \Illuminate\Database\Eloquent\Builder */ - public function newModelQuery() + public function newModelQuery(?array $fetchModes = []) { return $this->newEloquentBuilder( - $this->newBaseQueryBuilder() + $this->newBaseQueryBuilder(), + $fetchModes )->setModel($this); } /** * Get a new query builder with no relationships loaded. * + * @param array|null $fetchModes * @return \Illuminate\Database\Eloquent\Builder */ - public function newQueryWithoutRelationships() + public function newQueryWithoutRelationships(?array $fetchModes = []) { - return $this->registerGlobalScopes($this->newModelQuery()); + return $this->registerGlobalScopes($this->newModelQuery($fetchModes)); } /** @@ -1563,11 +1568,12 @@ public function registerGlobalScopes($builder) /** * Get a new query builder that doesn't have any global scopes. * + * @param array|null $fetchModes * @return \Illuminate\Database\Eloquent\Builder */ - public function newQueryWithoutScopes() + public function newQueryWithoutScopes(?array $fetchModes = []) { - return $this->newModelQuery() + return $this->newModelQuery($fetchModes) ->with($this->with) ->withCount($this->withCount); } @@ -1598,11 +1604,12 @@ public function newQueryForRestoration($ids) * Create a new Eloquent query builder for the model. * * @param \Illuminate\Database\Query\Builder $query + * @param array|null $fetchModes * @return \Illuminate\Database\Eloquent\Builder<*> */ - public function newEloquentBuilder($query) + public function newEloquentBuilder($query, ?array $fetchModes = []) { - return new static::$builder($query); + return new static::$builder($query, $fetchModes); } /** diff --git a/src/Illuminate/Database/Query/Builder.php b/src/Illuminate/Database/Query/Builder.php index dd7076c12dce..c6be31ffd416 100755 --- a/src/Illuminate/Database/Query/Builder.php +++ b/src/Illuminate/Database/Query/Builder.php @@ -249,13 +249,6 @@ class Builder implements BuilderContract */ public $useWritePdo = false; - /** - * The custom arguments for the PDOStatement::fetchAll / fetch functions. - * - * @var array - */ - public array $fetchUsing = []; - /** * Create a new query builder instance. * @@ -265,6 +258,7 @@ public function __construct( ConnectionInterface $connection, ?Grammar $grammar = null, ?Processor $processor = null, + ?array $fetchUsing = [], ) { $this->connection = $connection; $this->grammar = $grammar ?: $connection->getQueryGrammar(); From 6cb74117d9830ba2cdb67a447bd9298d304692c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20H=C3=A4drich?= <11225821+shaedrich@users.noreply.github.com> Date: Fri, 21 Feb 2025 15:37:39 +0100 Subject: [PATCH 2/4] Fix constructor property promotion --- src/Illuminate/Database/Query/Builder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Query/Builder.php b/src/Illuminate/Database/Query/Builder.php index c6be31ffd416..f235bdd95af5 100755 --- a/src/Illuminate/Database/Query/Builder.php +++ b/src/Illuminate/Database/Query/Builder.php @@ -258,7 +258,7 @@ public function __construct( ConnectionInterface $connection, ?Grammar $grammar = null, ?Processor $processor = null, - ?array $fetchUsing = [], + public ?array $fetchUsing = [], ) { $this->connection = $connection; $this->grammar = $grammar ?: $connection->getQueryGrammar(); From f52c974749da92f14c51f74e7b0399f3350d4750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20H=C3=A4drich?= <11225821+shaedrich@users.noreply.github.com> Date: Fri, 21 Feb 2025 16:02:26 +0100 Subject: [PATCH 3/4] Use named constructor argument --- src/Illuminate/Database/Eloquent/Model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Eloquent/Model.php b/src/Illuminate/Database/Eloquent/Model.php index 53e5fbb7e218..af54e4ae42cf 100644 --- a/src/Illuminate/Database/Eloquent/Model.php +++ b/src/Illuminate/Database/Eloquent/Model.php @@ -1609,7 +1609,7 @@ public function newQueryForRestoration($ids) */ public function newEloquentBuilder($query, ?array $fetchModes = []) { - return new static::$builder($query, $fetchModes); + return new static::$builder($query, fetchUsing: $fetchModes); } /** From 1be9e3f467c6580bdec6848dba510968e82c831e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20H=C3=A4drich?= <11225821+shaedrich@users.noreply.github.com> Date: Fri, 21 Feb 2025 16:04:03 +0100 Subject: [PATCH 4/4] Fix fixture --- tests/Database/DatabaseEloquentDynamicRelationsTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Database/DatabaseEloquentDynamicRelationsTest.php b/tests/Database/DatabaseEloquentDynamicRelationsTest.php index 346f00fa2297..28488a5f294d 100644 --- a/tests/Database/DatabaseEloquentDynamicRelationsTest.php +++ b/tests/Database/DatabaseEloquentDynamicRelationsTest.php @@ -101,7 +101,7 @@ public function getResults() // } - public function newQuery() + public function newQuery(?array $fetchModes = []) { $query = new class extends Query {