{"id":15527211,"url":"https://github.com/recca0120/laravel-repository","last_synced_at":"2025-05-16T01:06:53.847Z","repository":{"id":8947913,"uuid":"60332194","full_name":"recca0120/laravel-repository","owner":"recca0120","description":"Repository Design Pattern for Laravel with Eloquent or Collection","archived":false,"fork":false,"pushed_at":"2025-02-16T04:48:41.000Z","size":225,"stargazers_count":134,"open_issues_count":2,"forks_count":23,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-08T12:05:46.094Z","etag":null,"topics":["eloquent","laravel","orm","repository","sql"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/recca0120.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-03T08:36:59.000Z","updated_at":"2025-04-05T08:09:56.000Z","dependencies_parsed_at":"2024-06-19T17:11:32.726Z","dependency_job_id":"f27162c8-b9e6-4c21-97a1-1269174a4d0a","html_url":"https://github.com/recca0120/laravel-repository","commit_stats":{"total_commits":137,"total_committers":4,"mean_commits":34.25,"dds":"0.45985401459854014","last_synced_commit":"683d6400d1ea5f0d319d10b415e7036b0f3380fb"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/recca0120%2Flaravel-repository","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/recca0120%2Flaravel-repository/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/recca0120%2Flaravel-repository/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/recca0120%2Flaravel-repository/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/recca0120","download_url":"https://codeload.github.com/recca0120/laravel-repository/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254448579,"owners_count":22072764,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eloquent","laravel","orm","repository","sql"],"created_at":"2024-10-02T11:05:05.917Z","updated_at":"2025-05-16T01:06:48.835Z","avatar_url":"https://github.com/recca0120.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Repository Design Pattern for Laravel\n\n[![StyleCI](https://styleci.io/repos/60332194/shield?style=flat)](https://styleci.io/repos/60332194)\n[![Build Status](https://travis-ci.org/recca0120/laravel-repository.svg)](https://travis-ci.org/recca0120/laravel-repository)\n[![Total Downloads](https://poser.pugx.org/recca0120/repository/d/total.svg)](https://packagist.org/packages/recca0120/repository)\n[![Latest Stable Version](https://poser.pugx.org/recca0120/repository/v/stable.svg)](https://packagist.org/packages/recca0120/repository)\n[![Latest Unstable Version](https://poser.pugx.org/recca0120/repository/v/unstable.svg)](https://packagist.org/packages/recca0120/repository)\n[![License](https://poser.pugx.org/recca0120/repository/license.svg)](https://packagist.org/packages/recca0120/repository)\n[![Monthly Downloads](https://poser.pugx.org/recca0120/repository/d/monthly)](https://packagist.org/packages/recca0120/repository)\n[![Daily Downloads](https://poser.pugx.org/recca0120/repository/d/daily)](https://packagist.org/packages/recca0120/repository)\n[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/recca0120/laravel-repository/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/recca0120/laravel-repository/?branch=master)\n[![Code Coverage](https://scrutinizer-ci.com/g/recca0120/laravel-repository/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/recca0120/laravel-repository/?branch=master)\n\n## Install\n\nTo get the latest version of Laravel Exceptions, simply require the project using [Composer](https://getcomposer.org):\n\n```bash\ncomposer require recca0120/repository\n```\n\nInstead, you may of course manually update your require block and run `composer update` if you so choose:\n\n```json\n{\n    \"require\": {\n        \"recca0120/repository\": \"~2.0.0\"\n    }\n}\n```\n\n## Methods\n\n### Recca0120\\Repository\\EloquentRepository\n\n- find($id, $columns = ['*']);\n- findMany($ids, $columns = ['*']);\n- findOrFail($id, $columns = ['*']);\n- findOrNew($id, $columns = ['*']);\n- firstOrNew(array $attributes, array $values = []);\n- firstOrCreate(array $attributes, array $values = []);\n- updateOrCreate(array $attributes, array $values = []);\n- firstOrFail($criteria = [], $columns = ['*']);\n- create($attributes);\n- forceCreate($attributes);\n- update($id, $attributes);\n- forceUpdate($id, $attributes);\n- delete($id);\n- forceDelete($id);\n- newInstance($attributes = [], $exists = false);\n- get($criteria = [], $columns = ['*']);\n- chunk($criteria, $count, callable $callback);\n- each($criteria, callable $callback, $count = 1000);\n- first($criteria = [], $columns = ['*']);\n- paginate($criteria = [], $perPage = null, $columns = ['*'], $pageName = 'page', $page = null);\n- simplePaginate($criteria = [], $perPage = null, $columns = ['*'], $pageName = 'page', $page = null);\n- count($criteria = [], $columns = '*');\n- min($criteria, $column);\n- max($criteria, $column);\n- sum($criteria, $column);\n- avg($criteria, $column);\n- average($criteria, $column);\n- matching($criteria);\n- getQuery($criteria = []);\n- getModel();\n- newQuery();\n\n### Recca0120\\Repository\\Criteria\n\n- static create()\n- static expr($value)\n- static raw($value)\n- select($columns = ['*'])\n- selectRaw($expression, array $bindings = [])\n- selectSub($query, $as)\n- addSelect($column)\n- distinct()\n- from($table)\n- join($table, $first, $operator = null, $second = null, $type = 'inner', $where = false)\n- joinWhere($table, $first, $operator, $second, $type = 'inner')\n- leftJoin($table, $first, $operator = null, $second = null)\n- leftJoinWhere($table, $first, $operator, $second)\n- rightJoin($table, $first, $operator = null, $second = null)\n- rightJoinWhere($table, $first, $operator, $second)\n- crossJoin($table, $first = null, $operator = null, $second = null)\n- mergeWheres($wheres, $bindings)\n- tap($callback)\n- where($column, $operator = null, $value = null, $boolean = 'and')\n- orWhere($column, $operator = null, $value = null)\n- whereColumn($first, $operator = null, $second = null, $boolean = 'and')\n- orWhereColumn($first, $operator = null, $second = null)\n- whereRaw($sql, $bindings = [], $boolean = 'and')\n- orWhereRaw($sql, array $bindings = [])\n- whereIn($column, $values, $boolean = 'and', $not = false)\n- orWhereIn($column, $values)\n- whereNotIn($column, $values, $boolean = 'and')\n- orWhereNotIn($column, $values)\n- whereNull($column, $boolean = 'and', $not = false)\n- orWhereNull($column)\n- whereNotNull($column, $boolean = 'and')\n- whereBetween($column, array $values, $boolean = 'and', $not = false)\n- orWhereBetween($column, array $values)\n- whereNotBetween($column, array $values, $boolean = 'and')\n- orWhereNotBetween($column, array $values)\n- orWhereNotNull($column)\n- whereDate($column, $operator, $value = null, $boolean = 'and')\n- orWhereDate($column, $operator, $value)\n- whereTime($column, $operator, $value, $boolean = 'and')\n- orWhereTime($column, $operator, $value)\n- whereDay($column, $operator, $value = null, $boolean = 'and')\n- whereMonth($column, $operator, $value = null, $boolean = 'and')\n- whereYear($column, $operator, $value = null, $boolean = 'and')\n- whereNested(Closure $callback, $boolean = 'and')\n- addNestedWhereQuery($query, $boolean = 'and')\n- whereExists(Closure $callback, $boolean = 'and', $not = false)\n- orWhereExists(Closure $callback, $not = false)\n- whereNotExists(Closure $callback, $boolean = 'and')\n- orWhereNotExists(Closure $callback)\n- addWhereExistsQuery(Builder $query, $boolean = 'and', $not = false)\n- dynamicWhere($method, $parameters)\n- groupBy()\n- having($column, $operator = null, $value = null, $boolean = 'and')\n- orHaving($column, $operator = null, $value = null)\n- havingRaw($sql, array $bindings = [], $boolean = 'and')\n- orHavingRaw($sql, array $bindings = [])\n- orderBy($column, $direction = 'asc')\n- orderByDesc($column)\n- latest($column = 'created_at')\n- oldest($column = 'created_at')\n- inRandomOrder($seed = '')\n- orderByRaw($sql, $bindings = [])\n- skip($value)\n- offset($value)\n- take($value)\n- limit($value)\n- forPage($page, $perPage = 15)\n- forPageAfterId($perPage = 15, $lastId = 0, $column = 'id')\n- union($query, $all = false)\n- unionAll($query)\n- lock($value = true)\n- lockForUpdate()\n- sharedLock()\n- when($value, $callback, $default = null)\n- unless($value, $callback, $default = null)\n- whereKey($id)\n- whereKeyNot($id)\n- with($relations)\n- without($relations)\n- setQuery($query)\n- setModel(Model $model)\n- has($relation, $operator = '\u003e=', $count = 1, $boolean = 'and', Closure $callback = null)\n- orHas($relation, $operator = '\u003e=', $count = 1)\n- doesntHave($relation, $boolean = 'and', Closure $callback = null)\n- whereHas($relation, Closure $callback = null, $operator = '\u003e=', $count = 1)\n- orWhereHas($relation, Closure $callback = null, $operator = '\u003e=', $count = 1)\n- whereDoesntHave($relation, Closure $callback = null)\n- withCount($relations)\n- mergeConstraintsFrom(Builder $from)\n- withTrashed()\n- withoutTrashed()\n- onlyTrashed()\n\n## Usage\n\n### Eloquent\n\n#### Create a Model\n\nCreate your model normally, but it is important to define the attributes that can be filled from the input form data.\n\n```php\n\nnamespace App;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Post extends Model\n{\n    protected $fillable = [\n        'title',\n        'author',\n     ];\n}\n```\n\n### Create a Contract\n\n```php\n\nnamespace App\\Repositories\\Contracts;\n\ninterface PostRepository\n{\n\n}\n```\n\n#### Create a Repository\n\n```php\n\nnamespace App\\Repositories;\n\nuse App\\Repositories\\Contracts\\PostRepository as PostRepositoryContract;\nuse App\\Post;\nuse Recca0120\\Repository\\EloquentRepository;\n\nclass PostRepository extends EloquentRepository implements PostRepositoryContract\n{\n    public function __construct(Post $model)\n    {\n        $this-\u003emodel = $model;\n    }\n}\n```\n\n### Bind\n\n```php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\nuse App\\Repositories\\Contracts\\PostRepository as PostRepositoryContract;\n\nclass AppServiceProvider extends ServiceProvider\n{\n    public function register()\n    {\n        $this-\u003eapp-\u003esingleton(PostRepositoryContract::class, PostRepository::class);\n    }\n}\n\n```\n\n#### Controller\n\n```php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Repositories\\Contracts\\PostRepository;\n\nclass PostsController extends Controller\n{\n    protected $repository;\n\n    public function __construct(PostRepository $repository)\n    {\n        $this-\u003erepository = $repository;\n    }\n}\n```\n\n## Methods\n\nFind all results in Repository\n\n```php\n$posts = $this-\u003erepository-\u003eget();\n```\n\nFind all results in Repository with pagination\n\n```php\n$posts = $this-\u003erepository-\u003epaginate();\n```\n\nCount results in Repository\n\n```php\n$posts = $this-\u003erepository-\u003ecount();\n```\n\nCreate new entry in Repository\n\n```php\n$post = $this-\u003erepository-\u003ecreate(request()-\u003eall());\n```\n\nUpdate entry in Repository\n\n```php\n$post = $this-\u003erepository-\u003eupdate($id, request()-\u003eall());\n```\n\nDelete entry in Repository\n\n```php\n$this-\u003erepository-\u003edelete($id);\n```\n\nNew instance\n\n```php\n$post = $this-\u003erepository-\u003enewInstance([\n    'author' =\u003e 'author'\n]);\n```\n\nReturn Model With Conditions\n\n```\n$model = $this-\u003erepository-\u003ematching(Criteria::create()-\u003ewhere('title', '=', 'title'));\n```\n\nFind result by id\n\n```php\n$post = $this-\u003erepository-\u003efind($id);\n```\n\n### Find by conditions\n\n#### Using the Criteria\n\nCriteria is support all of Eloquent functions\n\n##### Single Criteria\n\n```php\n\nuse Recca0120\\Repository\\Criteria;\n\n$criteria = Criteria::create()\n    -\u003eselect('*')\n    -\u003ewhere('author', '=', 'author')\n    -\u003eorWhere('title', '=', 'title')\n    -\u003eorderBy('author', 'asc');\n\n$this-\u003erepository-\u003eget($criteria);\n$this-\u003erepository-\u003epaginate($criteria);\n```\n\n#### Multiple Criteria\n\n```php\n\nuse Recca0120\\Repository\\Criteria;\n\n$criteria = [];\n\n$criteria[] = Criteria::create()\n    -\u003eorderBy('author', 'asc');\n\n$criteria[] = Criteria::create()\n    -\u003ewhere('author', '=', 'author')\n    -\u003eorWhere('title', '=', 'title');\n\n$this-\u003erepository-\u003eget($criteria);\n// $this-\u003erepository-\u003epaginate($criteria);\n```\n\n##### With\n\n```php\n\nuse Recca0120\\Repository\\Criteria;\n\n$criteria = Criteria::create()\n    -\u003ewith('author', function($criteria) {\n        $criteria-\u003ewhere('author', 'author');\n    });\n\n$this-\u003erepository-\u003eget($criteria);\n// $this-\u003erepository-\u003epaginate($criteria);\n```\n\n#### Join\n\n```php\n\nuse Recca0120\\Repository\\Criteria;\n\n$criteria = Criteria::create()\n    -\u003ejoin('author', function ($criteria) {\n        $criteria-\u003eon('posts.author_id', '=', 'author.id');\n    });\n\n$this-\u003erepository-\u003eget($criteria);\n// $this-\u003erepository-\u003epaginate($criteria);\n```\n\n#### Expression\n\n```php\n\nuse Recca0120\\Repository\\Criteria;\n\n$criteria = Criteria::create()\n    -\u003ewhere('created_at', '\u003c=', Criteria::expr('NOW()'));\n\n$this-\u003erepository-\u003eget($criteria);\n// $this-\u003erepository-\u003epaginate($criteria);\n```\n\n#### Custom Criteria\n\n```php\n\nuse Recca0120\\Repository\\Criteria;\n\nclass CustomCriteria extends Criteria\n{\n    public function __construct($id)\n    {\n        $this-\u003ewhere('id', '=', $id);\n    }\n}\n\n$this-\u003erepository-\u003eget((new CustomCriteria(1))-\u003ewhere('autor', 'autor'));\n```\n\n## ToDo\n- Cache\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frecca0120%2Flaravel-repository","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frecca0120%2Flaravel-repository","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frecca0120%2Flaravel-repository/lists"}