Skip to content

Commit 72de3ab

Browse files
committed
Enhance the type-hinted return methods for interface
1 parent 7853d42 commit 72de3ab

File tree

2 files changed

+73
-50
lines changed

2 files changed

+73
-50
lines changed

src/Contracts/RepositoryInterface.php

Lines changed: 49 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,60 +3,83 @@
33
namespace CodeOfDigital\CacheRepository\Contracts;
44

55
use Closure;
6+
use Illuminate\Database\Eloquent\Builder;
7+
use Illuminate\Database\Eloquent\Collection;
8+
use Illuminate\Database\Eloquent\Model;
69

710
interface RepositoryInterface
811
{
9-
public function pluck($column, $key = null);
12+
public function pluck($column, $key = null): Collection|array;
1013

11-
public function sync($id, $relation, $attributes, $detaching = true);
14+
public function sync($id, $relation, $attributes, $detaching = true): mixed;
1215

13-
public function syncWithoutDetaching($id, $relation, $attributes);
16+
public function syncWithoutDetaching($id, $relation, $attributes): mixed;
1417

15-
public function all($columns = ['*']);
18+
public function all($columns = ['*']): mixed;
1619

17-
public function paginate($limit = null, $columns = ['*']);
20+
public function count(array $where = [], $columns = '*'): int;
1821

19-
public function simplePaginate($limit = null, $columns = ['*']);
22+
public function get($columns = ['*']): mixed;
2023

21-
public function find(int $id, $columns = ['*']);
24+
public function first($columns = ['*']): Model|Builder;
2225

23-
public function findByField(string $field, $value, $columns = ['*']);
26+
public function firstOrNew(array $attributes = []): Model|Builder;
2427

25-
public function findWhere(array $where, $columns = ['*']);
28+
public function firstOrCreate(array $attributes = []): Model|Builder;
2629

27-
public function findWhereIn($field, array $values, $columns = ['*']);
30+
public function limit($limit, $columns = ['*']): mixed;
2831

29-
public function findWhereNotIn($field, array $values, $columns = ['*']);
32+
public function paginate($limit = null, $columns = ['*']): mixed;
3033

31-
public function findWhereBetween($field, array $values, $columns = ['*']);
34+
public function simplePaginate($limit = null, $columns = ['*']): mixed;
3235

33-
public function create(array $attributes);
36+
public function find(int $id, $columns = ['*']): Model|Builder;
3437

35-
public function update(array $attributes, int $id);
38+
public function findByField(string $field, $value, $columns = ['*']): Collection|array;
3639

37-
public function updateOrCreate(array $attributes, array $values = []);
40+
public function findWhere(array $where, $columns = ['*']): Collection|array;
3841

39-
public function delete(int $id);
42+
public function findWhereIn($field, array $values, $columns = ['*']): Collection|array;
4043

41-
public function orderBy($column, $direction = 'asc');
44+
public function findWhereNotIn($field, array $values, $columns = ['*']): Collection|array;
4245

43-
public function with($relations);
46+
public function findWhereBetween($field, array $values, $columns = ['*']): Collection|array;
4447

45-
public function whereHas(string $relation, Closure $closure);
48+
public function create(array $attributes): Model;
4649

47-
public function withCount($relations);
50+
public function update(array $attributes, int $id): Model;
4851

49-
public function hidden(array $fields);
52+
public function updateOrCreate(array $attributes, array $values = []): Model|Builder;
5053

51-
public function visible(array $fields);
54+
public function delete(int $id): Model;
5255

53-
public function scopeQuery(Closure $scope);
56+
public function deleteWhere(array $where): ?bool;
5457

55-
public function resetScope();
58+
public function forceDelete(int $id): Model;
5659

57-
public function firstOrNew(array $attributes = []);
60+
public function restore(int $id): Model;
5861

59-
public function firstOrCreate(array $attributes = []);
62+
public function has($relation): static;
63+
64+
public function with($relations): static;
65+
66+
public function whereHas(string $relation, Closure $closure): static;
67+
68+
public function withCount($relations): static;
69+
70+
public function hidden(array $fields): static;
71+
72+
public function visible(array $fields): static;
73+
74+
public function orderBy($column, $direction = 'asc'): static;
75+
76+
public function take($limit): static;
77+
78+
public function scopeQuery(Closure $scope): static;
79+
80+
public function resetScope(): static;
81+
82+
public function applyScope(): static;
6083

6184
public static function __callStatic($method, $arguments);
6285

src/Eloquent/BaseRepository.php

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -67,29 +67,22 @@ public function makeModel(): Model
6767
return $this->model = $model;
6868
}
6969

70-
public function scopeQuery(Closure $scope): BaseRepository
71-
{
72-
return tap($this, function () use ($scope) {
73-
$this->scopeQuery = $scope;
74-
});
75-
}
76-
77-
public function pluck($column, $key = null): Collection
70+
public function pluck($column, $key = null): Collection|array
7871
{
7972
return $this->model->pluck($column, $key);
8073
}
8174

82-
public function sync($id, $relation, $attributes, $detaching = true)
75+
public function sync($id, $relation, $attributes, $detaching = true): mixed
8376
{
8477
return $this->find($id)->{$relation}()->sync($attributes, $detaching);
8578
}
8679

87-
public function syncWithoutDetaching($id, $relation, $attributes)
80+
public function syncWithoutDetaching($id, $relation, $attributes): mixed
8881
{
8982
return $this->sync($id, $relation, $attributes, false);
9083
}
9184

92-
public function all($columns = ['*']): Collection|array
85+
public function all($columns = ['*']): mixed
9386
{
9487
$this->applyScope();
9588

@@ -115,7 +108,7 @@ public function count(array $where = [], $columns = '*'): int
115108
return $result;
116109
}
117110

118-
public function get($columns = ['*']): Collection|array
111+
public function get($columns = ['*']): mixed
119112
{
120113
return $this->all($columns);
121114
}
@@ -153,7 +146,7 @@ public function firstOrCreate(array $attributes = []): Model|Builder
153146
return $model;
154147
}
155148

156-
public function limit($limit, $columns = ['*']): array|Collection
149+
public function limit($limit, $columns = ['*']): mixed
157150
{
158151
$this->take($limit);
159152
return $this->all($columns);
@@ -174,7 +167,7 @@ public function paginate($limit = null, $columns = ['*'], $method = "paginate"):
174167
return $results;
175168
}
176169

177-
public function simplePaginate($limit = null, $columns = ['*'])
170+
public function simplePaginate($limit = null, $columns = ['*']): mixed
178171
{
179172
return $this->paginate($limit, $columns, "simplePaginate");
180173
}
@@ -299,70 +292,77 @@ public function restore(int $id): Model
299292
return $this->manageDeletes($id, 'restore');
300293
}
301294

302-
public function has($relation): BaseRepository
295+
public function has($relation): static
303296
{
304297
return tap($this, function () use ($relation) {
305298
$this->model = $this->model->has($relation);
306299
});
307300
}
308301

309-
public function with($relations): BaseRepository
302+
public function with($relations): static
310303
{
311304
return tap($this, function () use ($relations) {
312305
$this->model = $this->model->with($relations);
313306
});
314307
}
315308

316-
public function withCount($relations): BaseRepository
309+
public function withCount($relations): static
317310
{
318311
return tap($this, function () use ($relations) {
319312
$this->model = $this->model->withCount($relations);
320313
});
321314
}
322315

323-
public function whereHas(string $relation, Closure $closure): BaseRepository
316+
public function whereHas(string $relation, Closure $closure): static
324317
{
325318
return tap($this, function () use ($relation, $closure) {
326319
$this->model = $this->model->whereHas($relation, $closure);
327320
});
328321
}
329322

330-
public function hidden(array $fields): BaseRepository
323+
public function hidden(array $fields): static
331324
{
332325
return tap($this, function () use ($fields) {
333326
$this->model->setHidden($fields);
334327
});
335328
}
336329

337-
public function visible(array $fields): BaseRepository
330+
public function visible(array $fields): static
338331
{
339332
return tap($this, function () use ($fields) {
340333
$this->model->setVisible($fields);
341334
});
342335
}
343336

344-
public function orderBy($column, $direction = 'asc'): BaseRepository
337+
public function orderBy($column, $direction = 'asc'): static
345338
{
346339
return tap($this, function () use ($column, $direction) {
347340
$this->model = $this->model->orderBy($column, $direction);
348341
});
349342
}
350343

351-
public function take($limit): BaseRepository
344+
public function take($limit): static
352345
{
353346
return tap($this, function () use ($limit) {
354347
$this->model = $this->model->limit($limit);
355348
});
356349
}
357350

358-
public function resetScope(): BaseRepository
351+
public function scopeQuery(Closure $scope): static
352+
{
353+
return tap($this, function () use ($scope) {
354+
$this->scopeQuery = $scope;
355+
});
356+
}
357+
358+
public function resetScope(): static
359359
{
360360
return tap($this, function () {
361361
$this->scopeQuery = null;
362362
});
363363
}
364364

365-
public function applyScope(): BaseRepository
365+
public function applyScope(): static
366366
{
367367
return tap($this, function () {
368368
if (isset($this->scopeQuery) && is_callable($this->scopeQuery)) {

0 commit comments

Comments
 (0)