From dc4fad14ec2367d33e1743d913a30c23b2c8bbd2 Mon Sep 17 00:00:00 2001 From: Steve Bauman Date: Wed, 4 May 2022 11:49:45 -0400 Subject: [PATCH 1/2] Add `value()` collection method --- .../Collections/Traits/EnumeratesValues.php | 16 +++++++++++++++ tests/Support/SupportCollectionTest.php | 20 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/Illuminate/Collections/Traits/EnumeratesValues.php b/src/Illuminate/Collections/Traits/EnumeratesValues.php index 59107bbf84d2..7375713d5496 100644 --- a/src/Illuminate/Collections/Traits/EnumeratesValues.php +++ b/src/Illuminate/Collections/Traits/EnumeratesValues.php @@ -321,6 +321,22 @@ public function firstWhere($key, $operator = null, $value = null) return $this->first($this->operatorForWhere(...func_get_args())); } + /** + * Get a single key's value from the first matching item in the collection. + * + * @param string $key + * @param mixed $default + * @return mixed + */ + public function value($key, $default = null) + { + if ($value = $this->firstWhere($key)) { + return data_get($value, $key, $default); + } + + return $default; + } + /** * Determine if the collection is not empty. * diff --git a/tests/Support/SupportCollectionTest.php b/tests/Support/SupportCollectionTest.php index 5a06f3b56993..e21640207ef6 100755 --- a/tests/Support/SupportCollectionTest.php +++ b/tests/Support/SupportCollectionTest.php @@ -1121,6 +1121,26 @@ public function testValues($collection) })->values()->all()); } + /** + * @dataProvider collectionClassProvider + */ + public function testValue($collection) + { + $c = new $collection([['id' => 1, 'name' => 'Hello'], ['id' => 2, 'name' => 'World']]); + + $this->assertEquals('Hello', $c->value('name')); + $this->assertEquals('World', $c->where('id', 2)->value('name')); + + $c = new $collection([ + ['id' => 1, 'pivot' => ['value' => 'foo']], + ['id' => 2, 'pivot' => ['value' => 'bar']], + ]); + + $this->assertEquals(['value' => 'foo'], $c->value('pivot')); + $this->assertEquals('foo', $c->value('pivot.value')); + $this->assertEquals('bar', $c->where('id', 2)->value('pivot.value')); + } + /** * @dataProvider collectionClassProvider */ From 12b27ed68b5745ba7f3c770a6426f38dfa947a56 Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Wed, 11 May 2022 16:50:25 -0500 Subject: [PATCH 2/2] formatting --- src/Illuminate/Collections/Traits/EnumeratesValues.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Collections/Traits/EnumeratesValues.php b/src/Illuminate/Collections/Traits/EnumeratesValues.php index 7375713d5496..ad70e2b5e5c6 100644 --- a/src/Illuminate/Collections/Traits/EnumeratesValues.php +++ b/src/Illuminate/Collections/Traits/EnumeratesValues.php @@ -334,7 +334,7 @@ public function value($key, $default = null) return data_get($value, $key, $default); } - return $default; + return value($default); } /**