madulinux/repository

Laravel repository pattern

v1.08 2023-09-26 07:26 UTC

This package is auto-updated.

Last update: 2024-05-26 08:48:05 UTC


README

laravel simple repository pattern generator.

Installation

install using composer

composer require "madulinux/repository"

Check if command make:repository already load

php artisan list

if not listed, run autoload

composer dump-autoload

Publish file config file

php artisan vendor:publish --tag="repositories"

add this provider class to your config/app.php

    'providers' => [
        ...
        App\Providers\CustomEloquentProvider::class,
        ...

Usage

Repository

To generate a repository for User model, use the following command

php artisan make:repository User

To generate a repository with a specific model

php artisan make:repository Foo --model=Bar

Repository Class

<?php namespace App\Repositories\Eloquent;

use App\Models\User;
use Madulinux\Repositories\Eloquent\BaseRepository as Repository;
use App\Repositories\UserRepositoryInterface;

/**
 * Class UserRepository
 * @package App\Repositories\Eloquent
 */
class UserRepository extends Repository implements UserRepositoryInterface
{

    /**
     * @return string
     */
    public function model()
    {
        return User::class;
    }
}

Interface Class

<?php namespace App\Repositories;

use Madulinux\Repositories\BaseRepositoryInterface as Repository;

/**
 * Class UserRepositoryInterface
 * @package App\Repositories
 */
interface UserRepositoryInterface extends Repository
{
    //
}

Criteria

To generate a new global criteria, use the following command

php artisan make:criteria UserAccess

To generate a createria for a specific model

php artisan make:criteria SeventeenYearsOld --model=Profile
<?php namespace App\Repositories\Criteria\Profiles;

use Madulinux\Repositories\Criteria\Criteria;
use Madulinux\Repositories\BaseRepositoryInterface as Repository;

/**
 * Class SeventeenYearsOld
 *
 * @package App\Repositories\Criteria\Profiles
 */
class SeventeenYearsOld extends Criteria {

    /**
     * @param            $model
     * @param Repository $repository
     *
     * @return mixed
     */
    public function apply($model, Repository $repository)
    {
        return $model;
    }
}

License

The contents of this repository is released under the MIT licence