<?php
namespace App\Repositories\Eloquents;
use App\Repositories\Interfaces\EloquentRepositoryInterface;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Schema;
class BaseRepository implements EloquentRepositoryInterface
{
/**
* @var Model
*/
protected $model;
/**
* @param Model $model
*/
public function __construct(Model $model)
{
$this->model = $model;
}
/**
* @param array|string[] $columns
* @param array $relations
* @return Collection
*/
public function all(array $columns = ['*'], array $relations = []): Collection
{
return $this->model->with($relations)->get($columns);
}
public function count(): int
{
return $this->model->count();
}
/**
* @param array $condition
* @param array $relations
* @param array|string[] $columns
* @return Collection
*/
public function getByCondition(array $condition, array $relations = [], array $columns = ['*']): Collection
{
return $this->model->where($condition)->with($relations)->get($columns);
}
/**
* @param int $modelId
* @param array|string[] $columns
* @param array $relations
* @param array $appends
* @return Model|null
*/
public function findById(
int $modelId,
array $columns = ['*'],
array $relations = [],
array $appends = []
): ?Model
{
return $this->model->select($columns)->with($relations)->findOrFail($modelId)->append($appends);
}
/**
* @param array $payload
* @return Model|null
*/
public function create(array $payload): ?Model
{
$model = $this->model->create($payload);
return $model->fresh();
}
/**
* @param int $modelId
* @param array $payload
* @return bool
*/
public function update(int $modelId, array $payload): bool
{
$model = $this->findById($modelId);
return $model->update($payload);
}
/**
* @param int $modelId
* @return bool
*/
public function deleteById(int $modelId): bool
{
if (property_exists($this, 'deleteAble')) {
$this->deleteAble($modelId);
}
return $this->findById($modelId)->delete();
}
}