2017 © Pedro Peláez
 

library repository

Repository Pattern for Laravel 5.2

image

samkitano/repository

Repository Pattern for Laravel 5.2

  • Monday, July 4, 2016
  • by SamKitano
  • Repository
  • 1 Watchers
  • 0 Stars
  • 26 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Repository pattern in Laravel 5.2

An implementation of this awesome Blog article by Bosnadev., (*1)

Based on Bosnadev/Repositories with some minor changes, mostly PSR-2 compliance., (*2)

You should, by all means, read the article and work it out for yourself, as the Repository Pattern is a very important concept to properly implement a data access layer for any medium/large scale application., (*3)

NOTE

As stated above, this package is a personal implementation of Bosniadev's for my projects and testings., (*4)

Thus, for the time being, you most definitely should use that package instead of this one, and follow it's instructions., (*5)

INSTALL

bash composer require "samkitano/repository", (*6)

Usage

<?php namespace App\Repositories;

use Kitano\Repository\Contracts\RepositoryInterface;
use Kitano\Repository\Eloquent\Repository;

class UseRepository extends Repository {

    public function model() {
        return 'App\User';
    }
}
<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model {

    protected $primaryKey = 'user_id';

    protected $table = 'users';

    protected $casts = [
        "verified"       => 'boolean'
    ];
}
<?php

namespace App\Http\Controllers;

use App\Repositories\UsersRepository as User;

class UsersController extends Controller {

    protected $user;

    public function __construct(User $user) {

        $this->user = $user;
    }

    public function index() {
        return response()->json($this->user->all());
    }
}

Available Methods

The following methods are available:, (*7)

Kitano\Repository\Contracts\RepositoryInterface
public function all($columns = array('*'))
public function lists($value, $key = null)
public function paginate($perPage = 1, $columns = array('*'));
public function create(array $data)
public function update(array $data, $id, $attribute = "id")
public function delete($id)
public function find($id, $columns = array('*'))
public function findBy($field, $value, $columns = array('*'))
public function findAllBy($field, $value, $columns = array('*'))
public function findWhere($where, $columns = array('*'))
Kitano\Repository\Contracts\CriteriaInterface
public function apply($model, Repository $repository)

Example usage

Create a new user in repository:, (*8)

$this->user->create($input);

Update existing user:, (*9)

$this->user->update($input, $user_id);

Delete user:, (*10)

$this->user->delete($id);

Find user by user_id;, (*11)

$this->user->find($id);

you can also chose what columns to fetch:, (*12)

$this->user->find($id, ['name', 'email', 'created_at']);

Get a single row by a single column criteria., (*13)

$this->user->findBy('email', $email);

Or you can get all rows by a single column criteria., (*14)

$this->user->findAllBy('active', true);

Get all results by multiple fields, (*15)

$this->user->findWhere([
    'active' => true,
    ['created_at', '>', Carbon::yesterday()]
]);

Criteria

<?php

namespace App\Repositories\Criteria\Users;

use Carbon\Carbon;
use Kitano\Repository\Criteria\Criteria;
use Kitano\Repository\Contracts\RepositoryInterface as Repository;

class RegisteredToday extends Criteria {

    /**
     * @param $model
     * @param RepositoryInterface $repository
     * @return mixed
     */
    public function apply($model, Repository $repository)
    {
        $yesterday = Carbon::yesterday();
        $model     = $model->where('created_at', '>', $yesterday);

        return $model;
    }
}
<?php

namespace App\Http\Controllers;

use App\Repositories\Criteria\Users\RegisteredToday;
use App\Repositories\UsersRepository as User;

class UsersController extends Controller {

    /**
     * @var User
     */
    protected $user;

    public function __construct(User $user) {

        $this->user = $user;
    }

    public function index() {
        $this->user->addCriteria(new RegisteredToday());
        return response()->json($this->user->all());
    }
}

Credits

Bosnadev/Repositories, (*16)

This great package by @andersao. Here is another package I used as reference., (*17)

This article by Shawn McCool, (*18)

This Jeffrey Way's lesson from Laracasts, (*19)

License

MIT license, (*20)

The Versions

04/07 2016

dev-master

9999999-dev

Repository Pattern for Laravel 5.2

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sam Kitano

database laravel repository eloquent repositories

04/07 2016

v0.0.2

0.0.2.0

Repository Pattern for Laravel 5.2

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sam Kitano

database laravel repository eloquent repositories

04/07 2016

v0.0.1

0.0.1.0

Repository Pattern for Laravel 5.2

  Sources   Download

MIT

The Requires

 

The Development Requires

by Sam Kitano

database laravel repository eloquent repositories