{"id":27628078,"url":"https://github.com/umutphp/laravel-model-recommendation","last_synced_at":"2025-04-23T14:02:56.404Z","repository":{"id":43640675,"uuid":"371523210","full_name":"umutphp/laravel-model-recommendation","owner":"umutphp","description":"This package generates recommendation list for elequent models. It provides a simple API to work with to generate and list recommendations for a model.","archived":false,"fork":false,"pushed_at":"2025-02-07T19:13:10.000Z","size":181,"stargazers_count":60,"open_issues_count":2,"forks_count":9,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-09T03:25:54.837Z","etag":null,"topics":["composer-package","eloquent","hacktoberfest","laravel","laravel-package","machinelearning","recommendation"],"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/umutphp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"umutphp"}},"created_at":"2021-05-27T22:55:42.000Z","updated_at":"2025-03-28T22:07:09.000Z","dependencies_parsed_at":"2025-02-07T20:22:24.730Z","dependency_job_id":"6eda6e53-4847-4be4-b6c5-a07b14076a56","html_url":"https://github.com/umutphp/laravel-model-recommendation","commit_stats":{"total_commits":119,"total_committers":2,"mean_commits":59.5,"dds":0.01680672268907568,"last_synced_commit":"f5d5db15ffcf33b93161aed2fbc85cd2ccdb5a19"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umutphp%2Flaravel-model-recommendation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umutphp%2Flaravel-model-recommendation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umutphp%2Flaravel-model-recommendation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umutphp%2Flaravel-model-recommendation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/umutphp","download_url":"https://codeload.github.com/umutphp/laravel-model-recommendation/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250447097,"owners_count":21432149,"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":["composer-package","eloquent","hacktoberfest","laravel","laravel-package","machinelearning","recommendation"],"created_at":"2025-04-23T14:02:12.035Z","updated_at":"2025-04-23T14:02:56.397Z","avatar_url":"https://github.com/umutphp.png","language":"PHP","funding_links":["https://github.com/sponsors/umutphp"],"categories":[],"sub_categories":[],"readme":"# Generate Recommendation List For Eloquent models\n\n![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/umutphp/laravel-model-recommendation) [![WOSPM Checker](https://github.com/umutphp/laravel-model-recommendation/actions/workflows/wospm.yml/badge.svg)](https://github.com/umutphp/laravel-model-recommendation/actions/workflows/wospm.yml) [![Codestyle Check](https://github.com/umutphp/laravel-model-recommendation/actions/workflows/phpcs.yml/badge.svg)](https://github.com/umutphp/laravel-model-recommendation/actions/workflows/phpcs.yml) [![Test In All PHP Versions](https://github.com/umutphp/laravel-model-recommendation/actions/workflows/composer-install.yml/badge.svg)](https://github.com/umutphp/laravel-model-recommendation/actions/workflows/composer-install.yml) [![Markdown Linter](https://github.com/umutphp/laravel-model-recommendation/actions/workflows/mardown-lint.yml/badge.svg)](https://github.com/umutphp/laravel-model-recommendation/actions/workflows/mardown-lint.yml)\n\nThis package generates recommendation list for elequent models objects. It provides a simple API to work with to generate and list recommendations for a model.\n\n![Laravel Model Recommendation](./assets/images/logo.png)\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n- [Glosary](#glosary)\n- [How To Install](#how-to-install)\n  - [Requiring The Library](#requiring-the-library)\n  - [Prepare The Database](#prepare-the-database)\n  - [Add The Service Provider](#add-the-service-provider)\n  - [Add The Trait And Interface To The Model](#add-the-trait-and-interface-to-the-model)\n- [How To Use](#how-to-use)\n  - [Algorithms](#algorithms)\n    - [DB Relation](#db-relation)\n    - [Similarity](#similarity)\n  - [Use Case 1](#use-case-1)\n  - [Use Case 2](#use-case-2)\n  - [Use Case 3](#use-case-3)\n  - [Use Case 4](#use-case-4)\n  - [Use Case 5](#use-case-5)\n  - [Use Case 6](#use-case-6)\n- [Contributing](#contributing)\n- [Security Vulnerabilities](#security-vulnerabilities)\n- [Credits](#credits)\n- [License](#license)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Glosary\n\n* **Data Table**: The table that stores the occurance (mosprobably with the ID of the model) of the models. Please look at the use cases for the example tables.\n* **Group Field**: The field of the table that defines the co-occurance of the models.\n* **Data Field**: The field that identifies the models.\n\n## How To Install\n\n### Requiring The Library\n\n```bash\ncomposer require \"umutphp/laravel-model-recommendation\"\n```\n\n### Prepare The Database\n\n```bash\nphp artisan vendor:publish --provider=\"Umutphp\\LaravelModelRecommendation\\ModelRecommendationServiceProvider\"\nphp artisan migrate\n```\n\n### Add The Service Provider\n\nAppend the following line to the `providers` array in `config/app.php`;\n\n```php\nUmutphp\\LaravelModelRecommendation\\ModelRecommendationServiceProvider::class,\n```\n\n### Add The Trait And Interface To The Model\n\nAdd `HasRecommendation` trait and `InteractWithRecommendation` interface to the class definition of the model. Please do not forget to implement the config function of the interface.\n\n`getRecommendationConfig()`: It should returns a multi dimensional array as follows with correct values. The definition of values in inner arrays are;\n\n* **recommendation_algorithm**: The choice of method for generating recommendations. The choices are `db_relation` and `similarity` for now. Some of the other keys are mandatory according to the choice.\n* **recommendation_data_table**: The name of the data table which is mandatory when `db_relation` algorithm is choosen.\n* **recommendation_data_table_filter**: The array of the filter values to be used in the query for fetching data from data table which is optional and can be used when `db_relation` algorithm is choosen. The array will contain fields and values as key-value pairs.  Pass an array like `'product_id' =\u003e ['\u003c', '500']` for more advanced operators\n* **recommendation_data_field**: The name of the data field which is mandatory when `db_relation` algorithm is choosen.\n* **recommendation_data_field_type**: The model class of the data field which is optional and can be used when `db_relation` algorithm is choosen.\n* **recommendation_group_field**: The name of the group field which is mandatory when `db_relation` algorithm is choosen.\n* **recommendation_count**: The number of recommendations generated per model. It is optional and the default value from config file is used instead.\n* **recommendation_order**: The order of the recommendation list. Possible values are `asc`, `desc`, `random`. It is optional and the default value from config file is used instead.\n* **similarity_feature_attributes**: The list of model attributes to be used in feature similarity calculations. It is an array contantaing the model attribute names (`color`, `material` for a product model etc.).\n* **similarity_numeric_value_attributes**: The list of attributes with numeric values (such as price for products or age for humans etc.) to be used in similarity calculations. It is an array contantaing the model attribute names.\n* **similarity_numeric_value_high_range**: A higher range for the numeric values. Please try to choose a bigger number than the maxiumum value for the numeric value choosen.\n* **similarity_taxonomy_attributes**: The list of model attributes defining the relation between taxonomy value and the model. It is an array that contains the relation name as key and the name of attribute in the relation model as the value (`category` =\u003e `name`). You should use empty string as the value if your taxonomy is in a simple field (`tag` =\u003e `''`). \n* **similarity_feature_weight**: The weight of the model features in similarity calculation. It is optional and  `1` as the default value is used instead to make all the calculations are in equal weight.\n* **similarity_numeric_value_weight**: The weight of the numeric fields in similarity calculation. It is optional and  `1` as the default value is used instead to make all the calculations are in equal weight.\n* **similarity_taxonomy_weight**: The weight of the taxonomoy values in similarity calculation. It is optional and  `1` as the default value is used instead to make all the calculations are in equal weight.\n\nA sample model class definition is as follows;\n\n```php\n\u003c?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Umutphp\\LaravelModelRecommendation\\InteractWithRecommendation;\nuse Umutphp\\LaravelModelRecommendation\\HasRecommendation;\n\nclass ModelName extends Model implements InteractWithRecommendation\n{\n    use HasFactory, HasRecommendation;\n\n\n    public static function getRecommendationConfig() :array\n    {\n        return [\n            'recommendation_name' =\u003e [\n                'recommendation_algorithm'         =\u003e 'db_relation',\n                'recommendation_data_table'        =\u003e 'recommendation_data_table',\n                'recommendation_data_table_filter' =\u003e [\n                    'field' =\u003e 'value',\n                    // array syntax supports: '=', '!=', '\u003e', '\u003e=', '\u003c', '\u003c=', 'LIKE', 'NOT LIKE'\n                    'product_id' =\u003e [\"NOT NULL\"],\n                    'cost' =\u003e [\"\u003c\", \"500\"],\n                ],\n                'recommendation_data_field'        =\u003e 'recommendation_data_field',\n                'recommendation_data_field_type'   =\u003e 'recommendation_data_field_type',\n                'recommendation_group_field'       =\u003e 'recommendation_group_field',\n                'recommendation_count'             =\u003e 5,\n                'recommendation_order'             =\u003e 'desc'\n            ]\n        ];\n    }\n}\n```\n\n## How To Use\n\nHere are a few short examples of what you can do.\n\n* To generate recommendation list for the given model type. This function can be called in an Artisan command and scheduled to run periodically.\n\n```php\nModelName::generateRecommendations('recommendation_name');\n```\n\n* To get the list of recommended models for a model.\n\n```php\n$recommendations = $model-\u003egetRecommendations('recommendation_name');\n```\n\nFor these functions (generateRecommendations() and getRecommendations()) to be executed correctly, you should implement the config function described in [Add The Trait And Interface To The Model](#add-the-trait-and-interface-to-the-model) section. The methods used to generate the recommendations and some use cases thay may help you are explained below.\n\n### Recommendation Generation Methods\n\n#### DB Relation\n\nThis is an item based filtering ([collaborative filtering](https://en.wikipedia.org/wiki/Collaborative_filtering)) method by using the co-occurrence of the models in a data table under same group defined with a field.\n\n#### Similarity\n\nInspired from the great articale \"[Building a Product Recommender System with Machine Learning in Laravel](https://oliverlundquist.com/2019/03/11/recommender-system-with-ml-in-laravel.html)\" by [Oliver Lundquist](https://oliverlundquist.com/).\n\nThe recommendation list is generated from a similarity calculation between models by using the field and taxonomy values of the objects.\n\n### Use Case 1\n\nAssume that you want to get recommendations for products (sold together) in an e-commerce site. You have `Product` model and `order_products` table storing the relation between orders and products.\n\n**order_products** table;\n\n| Field1 | Field2 | Field3 | Field4 | Field5 | Field6 |\n| --- | --- | --- | --- | --- | --- |\n| id | order_id | product_id | product_count | created_at | updated_at |\n\n\n**Product** model class;\n\n```php\n\u003c?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Umutphp\\LaravelModelRecommendation\\InteractWithRecommendation;\nuse Umutphp\\LaravelModelRecommendation\\HasRecommendation;\n\nclass Product extends Model implements InteractWithRecommendation\n{\n    use HasFactory, HasRecommendation;\n\n    public static function getRecommendationConfig() :array\n    {\n        return [\n            'sold_together' =\u003e [\n                'recommendation_algorithm'         =\u003e 'db_relation',\n                'recommendation_data_table'        =\u003e 'order_products',\n                'recommendation_data_table_filter' =\u003e [],\n                'recommendation_data_field'        =\u003e 'product_id',\n                'recommendation_data_field_type'   =\u003e self::class,\n                'recommendation_group_field'       =\u003e 'order_id',\n                'recommendation_count'             =\u003e 5\n            ]\n        ];\n    }\n}\n```\n\n**Function** calls;\n\n```php\n\u003c?php\n...\n\nuse App\\Model\\Product;\n\nProduct::generateRecommendations('sold_together');\n\n$product1        = Product::find(1);\n$recommendations = $product1-\u003egetRecommendations('sold_together');\n\n```\n\n### Use Case 2\n\nAssume that you want to get recommendations for users in a dating site. You have `User` model and `user_friends` table storing the relation between users.\n\n**user_friends** table;\n\n| Field1 | Field2 | Field3 | Field4 | Field5 |\n| --- | --- | --- | --- | --- |\n| id | user_id | friend_id | created_at | updated_at |\n\n```php\n\u003c?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Umutphp\\LaravelModelRecommendation\\InteractWithRecommendation;\nuse Umutphp\\LaravelModelRecommendation\\HasRecommendation;\n\nclass User extends Model implements InteractWithRecommendation\n{\n    use HasFactory, HasRecommendation;\n\n    public static function getRecommendationConfig() :array\n    {\n        return [\n            'possible_match' =\u003e [\n                'recommendation_algorithm'         =\u003e 'db_relation',\n                'recommendation_data_table'        =\u003e 'user_friends',\n                'recommendation_data_table_filter' =\u003e [],\n                'recommendation_data_field'        =\u003e 'friend_id',\n                'recommendation_data_field_type'   =\u003e self::class,\n                'recommendation_group_field'       =\u003e 'user_id',\n                'recommendation_count'             =\u003e 5\n            ]\n        ];\n    }\n}\n```\n\n**Function** calls;\n\n```php\n\u003c?php\n...\n\nuse App\\Model\\User;\n\nUser::generateRecommendations('possible_match');\n\n$user1           = User::find(1);\n$recommendations = $user1-\u003egetRecommendations('possible_match');\n\n```\n\n### Use Case 3\n\nA use case for generating recommendations from product similarity. We have `products` and `category` table as follows and a one-to-one relation between them.\n\n**products** table;\n\n| Field1 | Field2 | Field3 | Field4 | Field5 |\n| --- | --- | --- | --- | --- |\n| id | color | material | price | category_id |\n\n**category** table;\n\n| Field1 | Field2 |\n| --- | --- |\n| id | name |\n\n```php\n\u003c?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Umutphp\\LaravelModelRecommendation\\InteractWithRecommendation;\nuse Umutphp\\LaravelModelRecommendation\\HasRecommendation;\n\nclass Product extends Model implements InteractWithRecommendation\n{\n    use HasFactory, HasRecommendation;\n\n    public static function getRecommendationConfig() :array\n    {\n        return [\n            'similar_products' =\u003e [\n                'recommendation_algorithm'            =\u003e 'similarity',\n                'similarity_feature_weight'           =\u003e 1,\n                'similarity_numeric_value_weight'     =\u003e 1,\n                'similarity_numeric_value_high_range' =\u003e 1,\n                'similarity_taxonomy_weight'          =\u003e 1,\n                'similarity_feature_attributes'       =\u003e [\n                    'material', 'color'\n                ],\n                'similarity_numeric_value_attributes' =\u003e [\n                    'price'\n                ],\n                'similarity_taxonomy_attributes'      =\u003e [\n                    [\n                        'category' =\u003e 'name'\n                    ]\n                ],\n                'recommendation_count'                =\u003e 2,\n                'recommendation_order'                =\u003e 'desc'\n            ]\n        ];\n    }\n\n    /**\n     * Get the category associated with the product.\n     */\n    public function category()\n    {\n        return $this-\u003ehasOne(Category::class);\n    }\n}\n```\n\n### Use Case 4\n\nA hybrid use case (Use case 2 + Use case 3) containing both of the algorithms.\n\n**products** table;\n\n| Field1 | Field2 | Field3 | Field4 | Field5 |\n| --- | --- | --- | --- | --- |\n| id | color | material | price | category_id |\n\n**category** table;\n\n| Field1 | Field2 |\n| --- | --- |\n| id | name |\n\n**order_products** table;\n\n| Field1 | Field2 | Field3 | Field4 | Field5 | Field6 |\n| --- | --- | --- | --- | --- | --- |\n| id | order_id | product_id | product_count | created_at | updated_at |\n\n```php\n\u003c?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Umutphp\\LaravelModelRecommendation\\InteractWithRecommendation;\nuse Umutphp\\LaravelModelRecommendation\\HasRecommendation;\n\nclass Product extends Model implements InteractWithRecommendation\n{\n    use HasFactory, HasRecommendation;\n\n    public static function getRecommendationConfig() :array\n    {\n        return [\n            'sold_together' =\u003e [\n                'recommendation_algorithm'         =\u003e 'db_relation',\n                'recommendation_data_table'        =\u003e 'order_products',\n                'recommendation_data_table_filter' =\u003e [],\n                'recommendation_data_field'        =\u003e 'product_id',\n                'recommendation_data_field_type'   =\u003e self::class,\n                'recommendation_group_field'       =\u003e 'order_id',\n                'recommendation_count'             =\u003e 5,\n                'recommendation_order'             =\u003e 'random'\n            ],\n            'similar_products' =\u003e [\n                'recommendation_algorithm'            =\u003e 'similarity',\n                'similarity_feature_weight'           =\u003e 1,\n                'similarity_numeric_value_weight'     =\u003e 1,\n                'similarity_numeric_value_high_range' =\u003e 1,\n                'similarity_taxonomy_weight'          =\u003e 1,\n                'similarity_feature_attributes'       =\u003e [\n                    'material', 'color'\n                ],\n                'similarity_numeric_value_attributes' =\u003e [\n                    'price'\n                ],\n                'similarity_taxonomy_attributes'      =\u003e [\n                    [\n                        'category' =\u003e 'name'\n                    ]\n                ],\n                'recommendation_count'                =\u003e 2,\n                'recommendation_order'                =\u003e 'desc'\n            ]\n        ];\n    }\n\n    /**\n     * Get the category associated with the product.\n     */\n    public function category()\n    {\n        return $this-\u003ehasOne(Category::class);\n    }\n}\n```\n\n### Use Case 5\n\nA use case for using with [Laravel Follow](https://github.com/overtrue/laravel-follow) package (User follow unfollow system for Laravel).\n\n[Laravel Follow](https://github.com/overtrue/laravel-follow) package stores the data in `user_follower` table (Please check the [migration](https://github.com/overtrue/laravel-follow/blob/master/migrations/2020_04_04_000000_create_user_follower_table.php)). So, the implementation of the config function should be as follows;\n\n```php\n\u003c?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Umutphp\\LaravelModelRecommendation\\InteractWithRecommendation;\nuse Umutphp\\LaravelModelRecommendation\\HasRecommendation;\n\nclass User extends Model implements InteractWithRecommendation\n{\n    use HasFactory, HasRecommendation;\n\n    public static function getRecommendationConfig() :array\n    {\n        return [\n            'users_to_be_followed' =\u003e [\n                'recommendation_algorithm'         =\u003e 'db_relation',\n                'recommendation_data_table'        =\u003e 'user_follower',\n                'recommendation_data_table_filter' =\u003e [],\n                'recommendation_data_field'        =\u003e 'following_id',\n                'recommendation_data_field_type'   =\u003e self::class,\n                'recommendation_group_field'       =\u003e 'follower_id',\n                'recommendation_count'             =\u003e 5\n            ]\n        ];\n    }\n}\n```\n\n**Function** calls;\n\n```php\n\u003c?php\n...\n\nuse App\\Model\\User;\n\nUser::generateRecommendations('users_to_be_followed');\n\n$user1           = User::find(1);\n$recommendations = $user1-\u003egetRecommendations('users_to_be_followed');\n\n```\n\n### Use Case 6\n\nA use case for using with [Laravel Acquaintances](https://github.com/multicaret/laravel-acquaintances) package (to manage friendships (with groups), followships along with Likes, favorites etc.).\n\n[Laravel Acquaintances](https://github.com/multicaret/laravel-acquaintances) package stores the data in `interactions` table (Please check the [migration](https://github.com/multicaret/laravel-acquaintances/blob/master/database/migrations/create_acquaintances_interactions_table.php)). So, the implementation of the config function should be as follows;\n\n```php\n\u003c?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Umutphp\\LaravelModelRecommendation\\InteractWithRecommendation;\nuse Umutphp\\LaravelModelRecommendation\\HasRecommendation;\n\nclass User extends Model implements InteractWithRecommendation\n{\n    use HasFactory, HasRecommendation;\n\n    public static function getRecommendationConfig() :array\n    {\n        return [\n            'users_to_follow' =\u003e [\n                'recommendation_algorithm'         =\u003e 'db_relation',\n                'recommendation_data_table'        =\u003e 'interactions',\n                'recommendation_data_table_filter' =\u003e [\n                    'relation' =\u003e 'follow' // possible values are follow/like/subscribe/favorite/upvote/downvote. Choose the one that you want to generate the recommendation for.\n                ],\n                'recommendation_data_field'        =\u003e 'subject_id',\n                'recommendation_data_field_type'   =\u003e self::class,\n                'recommendation_group_field'       =\u003e 'user_id',\n                'recommendation_count'             =\u003e 5\n            ]\n        ];\n    }\n}\n```\n\n**Function** calls;\n\n```php\n\u003c?php\n...\n\nuse App\\Model\\User;\n\nUser::generateRecommendations('users_to_follow');\n\n$user1           = User::find(1);\n$recommendations = $user1-\u003egetRecommendations('users_to_follow');\n\n```\n\n\n\n## Contributing\n\nPlease see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.\n\n## Security Vulnerabilities\n\nPlease review [our security policy](../../security/policy) on how to report security vulnerabilities.\n\n## Credits\n\n- [All Contributors](../../contributors)\n\n## License\n\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumutphp%2Flaravel-model-recommendation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fumutphp%2Flaravel-model-recommendation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumutphp%2Flaravel-model-recommendation/lists"}