1. Go to this page and download the library: Download lerouse/laravel-repository library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
namespace App\Repositories\Models;
use Illuminate\Database\Eloquent\Builder;
use Lerouse\LaravelRepository\EloquentRepository;
use App\Models\User;
class UserRepository extends EloquentRepository
{
/**
* Get the Repository Query Builder
*
* @return Builder
*/
public function builder(): Builder
{
return User::query();
}
}
namespace App\Http\Controllers;
use Illuminate\Database\Eloquent\Builder;
class UserController
{
/**
* Get the Repository Query Builder
*
* @return Builder
*/
public function index(): Builder
{
$repository = new UserRepository;
return $repository->all();
}
}
namespace App\Repositories\Models;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Illuminate\Database\Eloquent\Builder;
use Lerouse\LaravelRepository\EloquentRepository;
use Illuminate\Database\Eloquent\Collection;
use App\Models\Team;
use App\Models\User;
class UserRepository extends EloquentRepository
{
/**
* Get all models as Paginated Results
*
* @param int|null $limit
* @param int $page
* @return LengthAwarePaginator
*/
public function paginate(int $limit = null, int $page = 1): LengthAwarePaginator
{
return $this->builder()
->orderBy($this->getModelTable() . '.created_at', 'desc')
->paginate($limit ?? 25, $page);
}
/**
* Get active Users
*
* @return Collection
*/
public function active(): Collection
{
return $this->builder()
->where($this->getModelTable() . 'active', '=', true)
->orderBy($this->getModelTable() . '.created_at', 'desc')
->get();
}
/**
* Get the Repository Query Builder
*
* @return Builder
*/
public function builder(): Builder
{
return User::query()
->select($this->getModelTable() . '.*')
->selectRaw('teams.name as user_team_name')
->leftJoin('teams', 'teams.id', '=', $this->getModelTable() . '.team_id');
}
}
namespace App\Http\Controllers;
use Illuminate\Database\Eloquent\Model;
use Lerouse\LaravelRepository\HasRepository;
class User extends Model
{
use HasRepository;
}
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Database\Eloquent\Builder;
class UserController extends Controller
{
/**
* Get the Repository Query Builder
*
* @return Builder
*/
public function show(User $user): Builder // binding resolved through the UserRepository's find method
{
return $user;
}
}