Skip to content

Commit c1cf775

Browse files
committed
Added support for 'findOrFail' and similar methods
1 parent 6b13596 commit c1cf775

File tree

3 files changed

+53
-19
lines changed

3 files changed

+53
-19
lines changed

src/Builder.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace Spatie\BinaryUuid;
4+
5+
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
6+
7+
class Builder extends EloquentBuilder {
8+
/**
9+
* Find a model by its primary key.
10+
*
11+
* @param mixed $id
12+
* @param array $columns
13+
* @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|static[]|static|null
14+
*/
15+
public function find($id, $columns = ['*'])
16+
{
17+
if (is_array($id) || $id instanceof Arrayable) {
18+
return $this->findMany($id, $columns);
19+
}
20+
21+
return $this->withUuid($id)->first($columns);
22+
}
23+
24+
/**
25+
* Find multiple models by their primary keys.
26+
*
27+
* @param \Illuminate\Contracts\Support\Arrayable|array $ids
28+
* @param array $columns
29+
* @return \Illuminate\Database\Eloquent\Collection
30+
*/
31+
public function findMany($ids, $columns = ['*'])
32+
{
33+
if (empty($ids)) {
34+
return $this->model->newCollection();
35+
}
36+
37+
return $this->withUuid($ids)->get($columns);
38+
}
39+
}

src/HasBinaryUuid.php

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Ramsey\Uuid\Uuid;
66
use Illuminate\Database\Eloquent\Model;
7-
use Illuminate\Database\Eloquent\Builder;
87

98
trait HasBinaryUuid
109
{
@@ -19,24 +18,6 @@ protected static function bootHasBinaryUuid()
1918
});
2019
}
2120

22-
public static function find($id, $columns = ['*'])
23-
{
24-
if (\is_array($id) || $id instanceof Arrayable) {
25-
return static::findMany($id, $columns);
26-
}
27-
28-
return static::withUuid($id)->first($columns);
29-
}
30-
31-
public static function findMany($ids, $columns = ['*'])
32-
{
33-
if (empty($ids)) {
34-
return static::newModelInstance()->newCollection();
35-
}
36-
37-
return static::withUuid($ids)->get($columns);
38-
}
39-
4021
public static function scopeWithUuid(Builder $builder, $uuid, $field = null): Builder
4122
{
4223
if ($field) {
@@ -203,6 +184,11 @@ public function newQueryForRestoration($id)
203184
return $this->newQueryWithoutScopes()->whereKey(base64_decode($id));
204185
}
205186

187+
public function newEloquentBuilder($query)
188+
{
189+
return new Builder($query);
190+
}
191+
206192
public function getRouteKeyName()
207193
{
208194
$suffix = $this->getUuidSuffix();

tests/Feature/HasBinaryUuidTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,4 +229,13 @@ public function it_finds_many_models_from_their_textual_uuids()
229229
$this->assertCount(2, TestModel::find([$model1->uuid_text, $model3->uuid_text,]));
230230
$this->assertCount(2, TestModel::findMany([$model1->uuid_text, $model3->uuid_text,]));
231231
}
232+
233+
/** @test */
234+
public function it_finds_or_fails_a_model_from_its_textual_uuid()
235+
{
236+
$model = TestModel::create();
237+
238+
$this->assertTrue($model->is(TestModel::findOrFail($model->uuid)));
239+
$this->assertTrue($model->is(TestModel::findOrFail($model->uuid_text)));
240+
}
232241
}

0 commit comments

Comments
 (0)