PHP code example of linx / eloquent-repository

1. Go to this page and download the library: Download linx/eloquent-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/ */

    

linx / eloquent-repository example snippets




// Author Model
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class Author extends Model
{
    protected $table = 'authors';
	
	// not necessary ...
    protected $guarded = ['id'];
    protected $casts = [
        'id' => 'int'
    ];

    public function posts()
    {
        return $this->hasMany(Post::class, 'author_id');
    }
}


// Author Repository
namespace App\Repositories;

use Janez89\Repository\AbstractEloquentRepository;
use App\Models\Author;

class AuthorRepository extends AbstractEloquentRepository
{
    public function getModelClass()
    {
        return Author::class;
    }
}


// ...
use App\Repositories\AuthorRepository;

class AuthorController extends Controller
{
	protected $repository;
	public function __construct(AuthorRepository $repository)
	{
		$this->repository = $repository;
	}

	public function index(Request $request)
	{
		return $this->repository->paginate($request->get('page'));
	}

	public function show($id)
	{
		return $this->repository->find($id);
		// if model not found then thrown ModelNotFoundException
	}
	
	public function store(Request $request)
	{
		// validation here ...
		return $this->repository->create($request->all());
	}

	public function update(Request $request, $id)
	{
		// validation here ...
		
		$model = $this->repository->find($id);
		$model->fill($request->all());
		$model->save();
		// OR
		$this->repository->save($model);
		return $model;
		
		// Custom soulution
		$this->repository->update($request->all(), $id);
		return $this->repository->find($id);
	}
	
	public function destroy($id)
	{
		$this->repository->delete($id);
	}
}


// Author Repository
namespace App\Repositories;

use Janez89\Repository\AbstractEloquentRepository;
use Janez89\Repository\Traits\EloquentTransactional;
use App\Models\Author;

class AuthorRepository extends AbstractEloquentRepository
{
	use EloquentTransactional;  // <-- here

    public function getModelClass()
    {
        return Author::class;
    }
}

// ...
$repository = new AuthorRepository();

$result = $repository->transaction(function () use ($repository, $request) {
	return $repository->create($request->all());
});

// OR
try {
	$repository->beginTransaction();
	// operations ...
	$repository->commit();
} catch (\Exception $e) {
	$repository->rollback();
}


// Author Repository
namespace App\Repositories;

use Janez89\Repository\AbstractEloquentRepository;
use Janez89\Repository\Traits\DataTables;
use App\Models\Author;

class AuthorRepository extends AbstractEloquentRepository
{
	use DataTables;  // <-- here

    public function getModelClass()
    {
        return Author::class;
    }
}


// ...
use App\Repositories\AuthorRepository;

class AuthorController extends Controller
{
	protected $repository;
	public function __construct(AuthorRepository $repository)
	{
		$this->repository = $repository;
	}
	
	public function index()
	{
		return view('author.index');
	}

	public function getData(Request $request)
	{
		return $this->repository->dataTable($request);
	}
	// ...
}