Pada kali ini saya akan kembali menulis artikel karena sudah lama sekali rasanya saya tidak menulis di blog ini :), oke langsung saja kita kepada pembahasan. Di awal artikel ini saya akan membahas yang sedikit berat yaitu tentang menggunakan design pattern pada framework laravel yaitu Belajar Menggunakan Repository Pattern Pada Laravel.
Pada laravel kita bisa menggunakan beberapa design pattern yang sangat berguna salah satunya adalah yang bernama repository pattern, Apa itu repostory pattern ? Repository pattern adalah sebuah pattern atau pola pendekatan dimana kita membuat abstraksi (dengan suatu class) untuk mengenkapsulasi (menyembunyikan) query. Ketika kita punya query yang kompleks, maka Repository Pattern ini dapat mengurangi kompleksitas dan memberikan reusability terhadap pengambilan data. Sehingga bukan business logic yang kita taruh Repository, tapi hanya logic yang langsung berkaitan dengan interaksi database (query-query seperti select atau create).
Saya akan contohkan, silahkan bat folder repository seperti gambar di bawah ini :

Misal kita punya model admin.php :
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class admin extends Model
{
protected $fillable = [
'id','name','email','password','remember_token','created_at','updated_at'
];
protected $table = 'admin';
}
Lalu buat file pada folder repository nya TodosReository.php yg isinya adalah interface seperti ini :
<?php
namespace App\Repositories;
interface TodosRepositories
{
public function getAll();
public function detail($id);
public function create(array $attributes);
public function update($id);
public function delete($id);
}
Lalu buat file dengan nama EloquentTodosImplements.php yang mana isinya adalah Query eloquent yang mengimplements interface yang sebelumnya telah kita buat :
<?php
namespace App\Repositories;
use App\Admin;
class EloquentTodosImplements implements TodosRepositories
{
private $model;
public function __construct(Admin $model)
{
$this->model = $model;
}
public function getAll()
{
return $this->model->all();
}
public function detail($id)
{
return $this->model->findOrFail($id);
}
public function create(array $attributes)
{
return $this->model->create($attributes);
}
public function update($id)
{
}
public function delete($id)
{
return $this->getById($id)->delete();
return true;
}
}
Nah selanjutnya kita buat controller baru dengan nama TodosController.php isinya kita akan panggil eloquent yang ada di repository tadi :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Repositories\TodosRepositories;
class TodosController extends Controller
{
private $todo;
public function __construct(TodosRepositories $todo)
{
$this->todo = $todo;
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$foo = $this->todo->getAll();
dd($foo);
}
}
Nah jika di jalankan maka akan menampilkan semua datanya.
Dengan begitu, kita akan mendapatkan manfaat:
– Lebih readable, karena getAll() jelas lebih mudah dibaca daripada Admin::All()
– Reusable. Kita bisa menggunakan query untuk get all ditempat lain.
– Testable. Kita bisa melakukan unit test. Karena Repository gampang di mock daripada Eloquent.