From 32e7bd6380ac483f5edcc09087425761d7470a60 Mon Sep 17 00:00:00 2001 From: Fernando Henrique Bandeira Date: Mon, 30 Jan 2017 11:13:46 -0200 Subject: [PATCH 1/3] Fix belongsTo Eagerload when ID == 0 --- src/Illuminate/Database/Eloquent/Relations/BelongsTo.php | 6 +++++- tests/Database/DatabaseEloquentBelongsToTest.php | 9 +++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php b/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php index 22f75a01eee9..3eb796f8795c 100755 --- a/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php +++ b/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php @@ -121,7 +121,11 @@ protected function getEagerModelKeys(array $models) // execute a "where in" statement to gather up all of those related records. $keys = collect($models)->map(function ($model) { return $model->{$this->foreignKey}; - })->filter()->all(); + })->filter(function($value) { + return (! is_null($value)) && + (! is_bool($value) || $value !== false) && + (! is_string($value) || $value !== ''); + })->all(); // If there are no keys that were not null we will just return an array with either // null or 0 in (depending on if incrementing keys are in use) so the query wont diff --git a/tests/Database/DatabaseEloquentBelongsToTest.php b/tests/Database/DatabaseEloquentBelongsToTest.php index d0b545a80524..b5fe40fafa55 100755 --- a/tests/Database/DatabaseEloquentBelongsToTest.php +++ b/tests/Database/DatabaseEloquentBelongsToTest.php @@ -28,8 +28,8 @@ public function testUpdateMethodRetrievesModelAndUpdates() public function testEagerConstraintsAreProperlyAdded() { $relation = $this->getRelation(); - $relation->getQuery()->shouldReceive('whereIn')->once()->with('relation.id', ['foreign.value', 'foreign.value.two']); - $models = [new EloquentBelongsToModelStub, new EloquentBelongsToModelStub, new AnotherEloquentBelongsToModelStub]; + $relation->getQuery()->shouldReceive('whereIn')->once()->with('relation.id', ['foreign.value', 'foreign.value.two', 0]); + $models = [new EloquentBelongsToModelStub, new EloquentBelongsToModelStub, new AnotherEloquentBelongsToModelStub, new EloquentBelongsToModelStubWithIdZero]; $relation->addEagerConstraints($models); } @@ -143,6 +143,11 @@ class AnotherEloquentBelongsToModelStub extends \Illuminate\Database\Eloquent\Mo public $foreign_key = 'foreign.value.two'; } +class EloquentBelongsToModelStubWithIdZero extends \Illuminate\Database\Eloquent\Model +{ + public $foreign_key = 0; +} + class MissingEloquentBelongsToModelStub extends \Illuminate\Database\Eloquent\Model { public $foreign_key; From 7cc4bcf0fbd4f81e9e5ce1f63dbdafe9c56e54de Mon Sep 17 00:00:00 2001 From: Fernando Henrique Bandeira Date: Mon, 30 Jan 2017 11:16:44 -0200 Subject: [PATCH 2/3] StyleCI --- src/Illuminate/Database/Eloquent/Relations/BelongsTo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php b/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php index 3eb796f8795c..0955f065ef55 100755 --- a/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php +++ b/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php @@ -121,7 +121,7 @@ protected function getEagerModelKeys(array $models) // execute a "where in" statement to gather up all of those related records. $keys = collect($models)->map(function ($model) { return $model->{$this->foreignKey}; - })->filter(function($value) { + })->filter(function ($value) { return (! is_null($value)) && (! is_bool($value) || $value !== false) && (! is_string($value) || $value !== ''); From 0dc7ad4cbe8cf4ffc7f5ff15ecaa534f695c23cc Mon Sep 17 00:00:00 2001 From: Fernando Henrique Bandeira Date: Mon, 30 Jan 2017 11:24:55 -0200 Subject: [PATCH 3/3] Chaging name order... --- tests/Database/DatabaseEloquentBelongsToTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Database/DatabaseEloquentBelongsToTest.php b/tests/Database/DatabaseEloquentBelongsToTest.php index b5fe40fafa55..40ec87827e1f 100755 --- a/tests/Database/DatabaseEloquentBelongsToTest.php +++ b/tests/Database/DatabaseEloquentBelongsToTest.php @@ -29,7 +29,7 @@ public function testEagerConstraintsAreProperlyAdded() { $relation = $this->getRelation(); $relation->getQuery()->shouldReceive('whereIn')->once()->with('relation.id', ['foreign.value', 'foreign.value.two', 0]); - $models = [new EloquentBelongsToModelStub, new EloquentBelongsToModelStub, new AnotherEloquentBelongsToModelStub, new EloquentBelongsToModelStubWithIdZero]; + $models = [new EloquentBelongsToModelStub, new EloquentBelongsToModelStub, new AnotherEloquentBelongsToModelStub, new EloquentBelongsToModelStubWithZeroId]; $relation->addEagerConstraints($models); } @@ -143,7 +143,7 @@ class AnotherEloquentBelongsToModelStub extends \Illuminate\Database\Eloquent\Mo public $foreign_key = 'foreign.value.two'; } -class EloquentBelongsToModelStubWithIdZero extends \Illuminate\Database\Eloquent\Model +class EloquentBelongsToModelStubWithZeroId extends \Illuminate\Database\Eloquent\Model { public $foreign_key = 0; }