{"id":36634181,"url":"https://github.com/crocodic-studio/laravel-model","last_synced_at":"2026-01-12T09:44:32.554Z","repository":{"id":53791918,"uuid":"331479705","full_name":"crocodic-studio/laravel-model","owner":"crocodic-studio","description":"An alternative Laravel Eloquent","archived":false,"fork":false,"pushed_at":"2021-03-13T11:24:31.000Z","size":84,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":5,"default_branch":"v4.0","last_synced_at":"2024-08-10T03:14:25.221Z","etag":null,"topics":["eloquent","laravel","laravelmodel","lumen","model"],"latest_commit_sha":null,"homepage":"https://crocodic.com","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/crocodic-studio.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}},"created_at":"2021-01-21T01:26:57.000Z","updated_at":"2024-02-28T03:46:39.000Z","dependencies_parsed_at":"2022-09-04T00:22:17.110Z","dependency_job_id":null,"html_url":"https://github.com/crocodic-studio/laravel-model","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/crocodic-studio/laravel-model","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crocodic-studio%2Flaravel-model","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crocodic-studio%2Flaravel-model/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crocodic-studio%2Flaravel-model/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crocodic-studio%2Flaravel-model/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crocodic-studio","download_url":"https://codeload.github.com/crocodic-studio/laravel-model/tar.gz/refs/heads/v4.0","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crocodic-studio%2Flaravel-model/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28337754,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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","laravelmodel","lumen","model"],"created_at":"2026-01-12T09:44:32.473Z","updated_at":"2026-01-12T09:44:32.542Z","avatar_url":"https://github.com/crocodic-studio.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Crocodic Laravel Model\nAn alternative laravel eloquent. Crocodic Laravel Model using Model, Repository and Service pattern. Model is a class that define anything about table columns. \nRepository is a class that define your own query method. And Service is a class that should define your own business logic query method.\n\n### Requirement\nLaravel / Lumen 5.* | 6.* | 7.* | 8.*\n\n### Install Command\n``composer require crocodic/laravel-model``\n\n### LUMEN USER: \nafter install with the composer then add this bellow to `/bootstrap/app.php` at section `Register Service Providers`\n\n``$app-\u003eregister(\\Crocodic\\LaravelModel\\LaravelModelServiceProvider::class);``\n\n### 1. Create a model\n\n*Create a model from a table*\u003cbr/\u003e\n``php artisan create:model foo_bar_table``\n\n*Create model for all tables*\u003cbr/\u003e\n``php artisan create:model``\n\n*Create a model with other connection*\u003cbr/\u003e\n``php artisan create:model foo_bar_table --connection=con2``\n\nI assume that you have a ```books``` table with the structure like bellow:\n```\nid (Integer) Primary Key\ncreated_at (Timestamp)\nname (Varchar) 255\n```\n\nIt will create a new model class file at ```/app/Models/BooksModel.php``` with the following file structure : \n\n```php\n\u003c?php\nnamespace App\\Models;\n\nuse DB;\nuse Crocodic\\LaravelModel\\Core\\Model;\n\nclass BooksModel extends Model\n{\n    public $id;\n    public $created_at;\n    public $name;\n}\n```\nAlso create a new Repository class file, and a new Service class file. \n`/app/Repositories/Books.php`\n`/app/Services/BooksService.php`\n\nYou can set custom connection, table and primary key name\n\n```php\n\u003c?php\nnamespace App\\Models;\n\nuse DB;\nuse Crocodic\\LaravelModel\\Core\\Model;\n\nclass BooksModel extends Model\n{\n    public $id;\n    public $created_at;\n    public $name;\n    \n    public function setConnection(){\n         return \"mysql\";\n    }\n\n    public function setTable() {\n        return \"books\";\n    }   \n\n    public function setPrimaryKey(){\n        return \"id\";\n    }\n}\n```\n\n### 2. Using Crocodic Laravel Model class on your Controller\nCrocodic Laravel Model use Model, Repository and Service pattern. If you want make a query, please use the Repository one instead of Model Class. Like example bellow: \nInsert ```use App\\Repositories\\Books; ``` at top of your controller class name.\n\n```php\n\u003c?php \nnamespace App\\Http\\Controllers;\n\nuse App\\Repositories\\Books;\n\nclass FooController extends Controller {\n    \n    public function index() \n    {\n        $books = Books::latest();\n        return view(\"books\", [\"bookData\"=\u003e$books]);\n    }\n    \n    public function detail($id)\n    {\n        $book = Books::find($id);\n        return view(\"book_detail\", [\"book\"=\u003e$book]);\n    }\n    \n    public function delete($id)\n    {\n        Books::deleteById($id);\n        \n        return redirect()-\u003eback()-\u003ewith([\"message\"=\u003e\"Book \".$book-\u003ename.\" has been deleted!\"]);\n    }\n}\n?\u003e\n```\n\n### 3. Using Crocodic Laravel Model class that has a relation\nI assume you have a table ```categories``` for book relation like bellow : \n```\nid (Integer) Primary Key\nname (Varchar) 255\n```\nand your book structure to be like bellow:\n```\nid (Integer) Primary Key\ncreated_at (Timestamp)\ncategories_id (Integer)\nname (Varchar) 255\n```\nNow you have to create a model for ```categories``` table, you can following previous steps.\n\nI assume that you have create a ```categories``` model, so make sure that now we have two files in the ```/app/Models/```\n``` \n/BooksModel.php\n/CategoriesModel.php\n```\nOpen the Books model , and add this bellow method\n```php\n    /**\n    * @return App\\Models\\Categories\n    */\n    public function category() {\n        return $this-\u003ebelongsTo(\"App\\Models\\Categories\");\n    }\n\n    // or \n    /**\n    * @return App\\Models\\Categories\n    */\n    public function category() {\n        return Categories::find($this-\u003ecategories_id);\n    }\n```\nThen open the FooController \n```php\n\u003c?php \nnamespace App\\Http\\Controllers;\n\nuse App\\Repositories\\Books;\n\nclass FooController extends Controller {\n    \n    \n    public function detail($id)\n    {\n        $book = Books::find($id);\n        \n        $data = [];\n        $data['book_id'] = $book-\u003eid;\n        $data['book_name'] = $book-\u003ename;\n        $data['book_category_id'] = $book-\u003ecategory()-\u003eid;\n        $data['book_category_name'] = $book-\u003ecategory()-\u003ename;\n        \n        return view(\"book_detail\",$data);\n    }\n    \n}\n?\u003e\n```\nAs you can see now we can get the category name by using ```-\u003ecategory()-\u003ename``` without any SQL Query or even Database Builder syntax. Also you can recursively go down to your relation with NO LIMIT.\n\n### 4. How to Casting DB Builder Collection output to Crocodic Laravel Model Class?\nYou can easily cast your simple database builder collection to cb model class.\n\n```php \n$row = DB::table(\"books\")-\u003ewhere(\"id\",1)-\u003efirst();\n\n//Cast to Crocodic Laravel Model\n$model = new Books($row);\n\n//And then you can use cb model normally\necho $model-\u003ename;\n```\n\n### 5. How to insert the data with Crocodic Laravel Model\nYou can easily insert the data with method ```-\u003esave()``` like bellow:\n```php \n$book = new Books();\n$book-\u003ecreated_at = date(\"Y-m-d H:i:s\"); //this created_at is a magic method you can ignore this\n$book-\u003ename = \"New Book\";\n$book-\u003ecategories_id = 1;\n$book-\u003esave();\n```\nThen if you want to get the last insert id you can do like bellow:\n```php\n...\n$book-\u003esave();\n$lastInsertId = $book-\u003eid; // get the id from id property\n...\n```\n\n### 5. How to update the data with Crocodic Laravel Model\nYou can easily update the data, just find it for first : \n```php \n$book = Books::findById(1);\n$book-\u003ename = \"New Book\";\n$book-\u003ecategories_id = 1;\n$book-\u003esave();\n```\n### 5. How to delete the data?\nYou can easily delete the data, just find it for first : \n```php \n$book = Books::findById(1);\n$book-\u003edelete();\n```\nor\n```php \nBooks::deleteById(1);\n```\n\n## Model Method Available\n```php\n/**\n* Find all data by specific condition.\n*/ \n$result = FooBar::findAllBy($column, $value = null, $sorting_column = \"id\", $sorting_dir = \"desc\");\n// or \n$result = FooBar::findAllBy(['foo'=\u003e1,'bar'=\u003e2]);\n\n/**\n* Find all data without sorting\n*/\n$result = FooBar::findAll();\n\n/**\n* Count the records of table\n*/ \n$result = FooBar::count();\n\n/**\n* Count the records with specific condition \n*/\n$result = FooBar::countBy($column, $value = null);\n// or\n$result = FooBar::countBy(['foo'=\u003e1,'bar'=\u003e2]);\n\n/**\n* Find all datas and ordering the data to descending\n*/\n$result = FooBar::findAllDesc($column = \"id\");\n// or simply\n$result = FooBar::latest();\n\n/**\n* Find all datas and ordering the data to ascending\n*/\n$result = FooBar::findAllAsc($column = \"id\");\n// or simply\n$result = FooBar::oldest();\n\n/** \n* Find/Fetch a record by a primary key value\n*/\n$result = FooBar::findById($id);\n// or simply\n$result = FooBar::find($id);\n\n/**\n* Create a custom query, and result laravel Query Builder collection\n*/\n$result = FooBar::where(\"foo\",\"=\",1)-\u003efirst();\n// or\n$result = FooBar::table()-\u003ewhere(\"foo\",\"=\",1)-\u003efirst();\n\n/**\n* Join a table with a simple step\n*/\n$result = FooBar::table()-\u003ewithTable(\"related_table\")-\u003efirst();\n\n/**\n* Auto select all from a table, and make them prefix with its table name\n*/\n$result = FooBar::table()\n-\u003ejoin(\"related_table\",\"related_table.id\",\"=\",\"related_table_id\")\n-\u003eaddSelect(\"foo_bar.*\")\n-\u003eaddSelectTable(\"related_table\") // This will produce: related_table_id, related_table_created_at, etc\n-\u003efirst();\n\n/**\n* Add like condition to the query\n*/\n$result = FooBar::table()-\u003elike(\"column\",$yourKeyword)-\u003eget();\n// It will produce same as FooBar::table()-\u003ewhere(\"columne\",\"like\",\"%\".$yourKeyword.\"%\")-\u003eget()\n\n/**\n* Find a record by a specific condition\n*/\n$result = Foobar::findBy($column, $value = null);\n// or \n$result = Foobar::findBy(['foo'=\u003e1,'bar'=\u003e2]);\n\n/**\n* To run the insert SQL Query\n*/\n$fooBar = new FooBar();\n$fooBar-\u003ename = \"Lorem ipsum\";\n$fooBar-\u003esave();\n\n/**\n* To bulk insert\n*/\n$data = [];\n$foo = new FooBar();\n$foo-\u003ename = \"Lorem ipsum 1\";\narray_push($data, $foo);\n$bar = new FooBar();\n$bar-\u003ename = \"Lorem ipsum 2\";\narray_push($data, $bar);\nFooBar::bulkInsert($data);\n\n\n/**\n* To run the update SQL Query\n*/\n$fooBar = FooBar::findById($value);\n$fooBar-\u003ename = \"Lorem ipsum\";\n$fooBar-\u003esave();\n\n/**\n* To delete the record by a primary key value\n*/\nFooBar::deleteById($value);\n\n/**\n* To delete the record by a specific condition\n*/\nFooBar::deleteBy($column, $value = null);\n// or\nFoobar::deleteBy(['foo'=\u003e1,'bar'=\u003e2]);\n\n/**\n* To delete after you fetch the record \n*/\n$fooBar = FooBar::findById($value);\n$fooBar-\u003edelete();\n```\n\n## A One-To-Many Relationship\n```php\nclass Posts extends Model {\n    // etc\n    \n    /**\n    * @return Illuminate\\Support\\Collection\n    */\n    public function comments() {\n        return $this-\u003ehasMany(Comments::class);\n    }\n    \n    // or with full option\n    /**\n    * @return Illuminate\\Support\\Collection\n    */\n    public function comments() {\n        return $this-\u003ehasMany(Comments::class, \"foreign_key\", \"local_key\", function($condition) {\n            return $condition-\u003ewhere(\"status\",\"Active\");\n        });\n    }\n}\n```\n\n## A One-To-One Relationship\n```php\nclass Comments extends Model {\n    // etc\n    \n    /**\n    * @return App\\Models\\Posts\n    */\n    public function post() {\n        return $this-\u003ebelongsTo(Posts::class);\n    }\n    \n    // or with full option\n    /**\n    * @return App\\Models\\Posts\n    */\n    public function post() {\n        return $this-\u003ebelongsTo(Posts::class, \"foreign_key\", \"local_key\");\n    }\n}\n```\n\n## Other Useful\n1. [CRUDBooster Laravel CRUD Generator](https://github.com/crocodic-studio/crudbooster)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrocodic-studio%2Flaravel-model","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrocodic-studio%2Flaravel-model","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrocodic-studio%2Flaravel-model/lists"}