PHPackages                             artryazanov/laravel-steam-apps-db - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. artryazanov/laravel-steam-apps-db

ActiveLibrary[Database &amp; ORM](/categories/database)

artryazanov/laravel-steam-apps-db
=================================

Laravel package for Steam apps database functionality

v1.0.2(3mo ago)1175↓100%[1 PRs](https://github.com/artryazanov/laravel-steam-apps-db/pulls)UnlicensePHPPHP ^8.2CI passing

Since Aug 10Pushed 3mo agoCompare

[ Source](https://github.com/artryazanov/laravel-steam-apps-db)[ Packagist](https://packagist.org/packages/artryazanov/laravel-steam-apps-db)[ RSS](/packages/artryazanov-laravel-steam-apps-db/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (4)Dependencies (4)Versions (5)Used By (0)

Laravel Steam Apps DB
=====================

[](#laravel-steam-apps-db)

A Laravel package for managing Steam application data in your database. This package provides functionality to import Steam apps, fetch detailed information, and retrieve news for Steam games.

[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](https://opensource.org/licenses/MIT)[![Latest Version on Packagist](https://camo.githubusercontent.com/356a36abe87957cce74fb095dc18c1c094b22a4d54477566d1cec38e96be37b8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6172747279617a616e6f762f6c61726176656c2d737465616d2d617070732d64622e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/artryazanov/laravel-steam-apps-db)[![Total Downloads](https://camo.githubusercontent.com/856a63269dc73a5038b6689a11200ef1571ce2eced8a4fc6079a3d5660caeb8c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6172747279617a616e6f762f6c61726176656c2d737465616d2d617070732d64622e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/artryazanov/laravel-steam-apps-db)[![GitHub Tests Action Status](https://camo.githubusercontent.com/645a1d7df6d7ea05cc638a219b3c8406fa1ab4b04c5d8cfbf4c68935d2b5e946/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6172747279617a616e6f762f6c61726176656c2d737465616d2d617070732d64622f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473)](https://camo.githubusercontent.com/645a1d7df6d7ea05cc638a219b3c8406fa1ab4b04c5d8cfbf4c68935d2b5e946/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6172747279617a616e6f762f6c61726176656c2d737465616d2d617070732d64622f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473)[![GitHub Pint Action Status](https://camo.githubusercontent.com/d58dc5077b2dba47334a9132374f637cc703bcb767f59c40373db92679ef1794/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6172747279617a616e6f762f6c61726176656c2d737465616d2d617070732d64622f72756e2d70696e742e796d6c3f6272616e63683d6d61696e266c6162656c3d70696e74)](https://camo.githubusercontent.com/d58dc5077b2dba47334a9132374f637cc703bcb767f59c40373db92679ef1794/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6172747279617a616e6f762f6c61726176656c2d737465616d2d617070732d64622f72756e2d70696e742e796d6c3f6272616e63683d6d61696e266c6162656c3d70696e74)[![codecov](https://camo.githubusercontent.com/84c6e729a00f06d286d1a83b078368805c98a6840445a8e8cdf2eca7e2d74b81/68747470733a2f2f636f6465636f762e696f2f67682f6172747279617a616e6f762f6c61726176656c2d737465616d2d617070732d64622f67726170682f62616467652e737667)](https://codecov.io/gh/artryazanov/laravel-steam-apps-db)[![PHP Version](https://camo.githubusercontent.com/d840cef9807c8f76051ad687841d67f4d830c84e0d83236968e53124ef6742d5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344382e322d3838393242462e737667)](https://www.php.net/)[![Laravel Version](https://camo.githubusercontent.com/27964a7c55b60f7790d02682ab6a75188251f7a4f4c905dbb3eb20b682b77f35/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d31312e7825374331322e782d7265642e737667)](https://laravel.com/)

Introduction
------------

[](#introduction)

Laravel Steam Apps DB provides a set of tools to work with Steam application data in your Laravel application. It allows you to:

- Import basic information about all Steam applications
- Fetch detailed information about specific Steam games
- Retrieve and store news articles for Steam games
- Access Steam app data through Eloquent models

The package handles all the database schema creation and provides a console command to import apps and queued jobs to fetch details and news from the Steam API.

Installation
------------

[](#installation)

### Requirements

[](#requirements)

- PHP 8.2 or higher
- Laravel 11.x or 12.x

### Installation Steps

[](#installation-steps)

1. Install the package via Composer:

```
composer require artryazanov/laravel-steam-apps-db
```

2. The package will automatically register its service provider if you're using Laravel's package auto-discovery.
3. Publish and run the migrations:

```
php artisan migrate
```

Usage
-----

[](#usage)

### Console Commands

[](#console-commands)

The package provides one main console command:

#### Import Steam Apps

[](#import-steam-apps)

This command imports basic information about all Steam applications from the Steam API.

```
php artisan steam:import-apps
```

This will fetch a list of all Steam applications and store them in the `steam_apps` table.

After saving each app, this command dispatches queued jobs to fetch the app's details and news asynchronously via Laravel's queue.

### Configuration

[](#configuration)

- `laravel-steam-apps-db.enable_news_scanning`: Controls whether the package dispatches jobs to fetch Steam news. Default is `false` (disabled). Set via env `LSADB_ENABLE_NEWS_SCANNING=true` or publish and edit the config.
- `laravel-steam-apps-db.enable_workshop_scanning`: Controls whether the package dispatches jobs to fetch Steam Workshop items. Default is `false` (disabled). Set via env `LSADB_ENABLE_WORKSHOP_SCANNING=true` or publish and edit the config.
- `laravel-steam-apps-db.queue`: Queue name for dispatched jobs (e.g., `high`, `default`, `low`). Default is `default`. Set via env `LSADB_QUEUE=default` or publish and edit the config.
- `laravel-steam-apps-db.decay_seconds`: Global rate limit interval (in seconds) enforced via Redis throttle for FetchSteamApp\* jobs. When &gt; 0, jobs across all workers will run at most once per interval; when 0 or less, throttling is disabled. Default is `1`. Set via env `LSADB_DECAY_SECONDS=1`.

Note: Throttling requires Redis to be configured in your application (used by Laravel's `Redis::throttle`). If you don't use Redis, set `decay_seconds` to `0` to disable throttling.

Publish the config if needed:

```
php artisan vendor:publish --tag=laravel-steam-apps-db-config
```

### Queue and Jobs

[](#queue-and-jobs)

Starting from the current version, fetching details and news is performed by queued jobs that are dispatched per app during import:

- `Artryazanov\LaravelSteamAppsDb\Jobs\FetchSteamAppDetailsJob`
- `Artryazanov\LaravelSteamAppsDb\Jobs\FetchSteamAppNewsJob`
- `Artryazanov\LaravelSteamAppsDb\Jobs\FetchSteamAppWorkshopItemsJob`

Additional notes:

- Details job is always dispatched for every app during import.
- News job is dispatched only when `laravel-steam-apps-db.enable_news_scanning` is enabled (disabled by default).
- Workshop job is dispatched only when `laravel-steam-apps-db.enable_workshop_scanning` is enabled (disabled by default).
- Jobs are unique per appid and implement Laravel's ShouldBeUnique, so duplicate jobs for the same appid won't be queued.
- API call pacing is handled via a global Redis throttle controlled by `laravel-steam-apps-db.decay_seconds`. When enabled, only one FetchSteamApp job is allowed to run per interval across all workers; excess jobs are released back to the queue to retry shortly.

To process the jobs, make sure you run a queue worker in your application environment:

```
php artisan queue:work
```

You can configure the queue connection (sync, database, redis, etc.) via your `.env` and `config/queue.php`. For production, use a supervisor or a process manager to keep the worker running.

Manual dispatch examples (optional):

```
use Artryazanov\LaravelSteamAppsDb\Jobs\FetchSteamAppDetailsJob;
use Artryazanov\LaravelSteamAppsDb\Jobs\FetchSteamAppNewsJob;

// Dispatch jobs for a specific appid (e.g., 570 - DOTA 2)
FetchSteamAppDetailsJob::dispatch(570);
// Note: News scanning is optional. Ensure it's enabled in config
// or dispatch the job explicitly as needed.
FetchSteamAppNewsJob::dispatch(570);
// Workshop items (optional)
use Artryazanov\LaravelSteamAppsDb\Jobs\FetchSteamAppWorkshopItemsJob;
FetchSteamAppWorkshopItemsJob::dispatch(570);
```

Note: Previous console commands `steam:fetch-app-details` and `steam:fetch-app-news` have been replaced by the queued jobs and are no longer required.

### Models

[](#models)

The package provides several Eloquent models to interact with the stored data:

#### Main Models

[](#main-models)

- **SteamApp**: The core model representing a Steam application
- **SteamAppDetail**: Detailed information about a Steam app
- **SteamAppNews**: News articles for a Steam app
- **SteamAppWorkshopItem**: Workshop items for a Steam app

#### Related Models

[](#related-models)

- **SteamAppCategory**: Categories for Steam apps
- **SteamAppGenre**: Genres for Steam apps
- **SteamAppDeveloper**: Developers of Steam apps
- **SteamAppPublisher**: Publishers of Steam apps
- **SteamAppRequirement**: System requirements for different platforms
- **SteamAppScreenshot**: Screenshots for Steam apps
- **SteamAppMovie**: Videos/trailers for Steam apps
- **SteamAppPriceInfo**: Price information for Steam apps
- **SteamAppDlc**: DLC appids linked to a base app
- **SteamAppDemo**: Demos (appid + description)
- **SteamAppPackage**: Store package ids
- **SteamAppPackageGroup**: Package groups with display metadata
- **SteamAppPackageGroupSub**: Individual package options inside groups
- **SteamAppAchievementHighlighted**: Highlighted achievements
- **SteamAppContentDescriptorId**: Content descriptor ids (e.g. violence)
- **SteamAppRating**: Ratings from boards (ESRB, PEGI, etc.)

### Example Usage

[](#example-usage)

```
use Artryazanov\LaravelSteamAppsDb\Models\SteamApp;

// Get all Steam apps
$apps = SteamApp::all();

// Get a specific app by Steam appid
$app = SteamApp::where('appid', 570)->first(); // DOTA 2

// Get detailed information
$details = $app->detail;

// Get system requirements
$requirements = $app->requirements;

// Get screenshots
$screenshots = $app->screenshots;

// Get categories
$categories = $app->categories;

// Get genres
$genres = $app->genres;

// Get developers
$developers = $app->developers;

// Get publishers
$publishers = $app->publishers;

// Get price information
$priceInfo = $app->priceInfo;

// Get news articles
$news = $app->news;
```

Database Schema
---------------

[](#database-schema)

The package creates the following tables:

1. `steam_apps` - Main table with basic app info
2. `steam_app_details` - Detailed information about each app
3. `steam_app_requirements` - System requirements for different platforms
4. `steam_app_screenshots` - Screenshots for each app
5. `steam_app_movies` - Videos/trailers for each app
6. `steam_app_categories` - Categories reference table
7. `steam_app_category` - Pivot table for app-category relationship
8. `steam_app_genres` - Genres reference table
9. `steam_app_genre` - Pivot table for app-genre relationship
10. `steam_app_developers` - Developers reference table
11. `steam_app_developer` - Pivot table for app-developer relationship
12. `steam_app_publishers` - Publishers reference table
13. `steam_app_publisher` - Pivot table for app-publisher relationship
14. `steam_app_price_info` - Price information for each app
15. `steam_app_news` - News items for each app
16. `steam_app_dlcs` - DLC appids for each app
17. `steam_app_demos` - Demos for each app
18. `steam_app_packages` - Package ids for each app
19. `steam_app_package_groups` - Package groups per app
20. `steam_app_package_group_subs` - Group options (subs)
21. `steam_app_achievements_highlighted` - Highlighted achievements
22. `steam_app_content_descriptor_ids` - Content descriptor ids
23. `steam_app_ratings` - Ratings by boards
24. `steam_app_workshop_items` - Workshop items for each app

Architecture
------------

[](#architecture)

This package uses a modular architecture with **Actions** and **Services** to separate concerns:

- **Services**: `SteamApiClient` handles all direct interactions with the Steam API, including rate limiting and error handling.
- **Actions**: Contain the core business logic (e.g., `FetchSteamAppDetailsAction`, `ImportSteamAppsAction`).
- **Jobs**: Thin wrappers around Actions that handle queuing and uniqueness logic.

If you need to fetch dataprogrammatically without using the queue, you can resolve the Actions from the container:

```
use Artryazanov\LaravelSteamAppsDb\Actions\FetchSteamAppDetailsAction;

// Fetch and store details for a specific app immediately
$action = app(FetchSteamAppDetailsAction::class);
$action->execute(570);
```

Testing
-------

[](#testing)

The package includes tests for all its functionality. To run the tests, you can use either of the following methods:

```
# Using Composer script
composer test
```

```
# Using PHPUnit directly
vendor/bin/phpunit
```

License
-------

[](#license)

This package is open-sourced software licensed under the [MIT license](LICENSE).

###  Health Score

42

—

FairBetter than 90% of packages

Maintenance81

Actively maintained with recent releases

Popularity16

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 98.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~58 days

Total

4

Last Release

100d ago

Major Versions

v0.1.0 → v1.0.02026-02-02

PHP version history (2 changes)v0.1.0PHP ^8.0

v1.0.0PHP ^8.2

### Community

Maintainers

![](https://www.gravatar.com/avatar/6357ca96399697b30326b317cf64cb85eb01005fb296cf50176d4008cf448135?d=identicon)[artryazanov](/maintainers/artryazanov)

---

Top Contributors

[![artryazanov](https://avatars.githubusercontent.com/u/4519328?v=4)](https://github.com/artryazanov "artryazanov (103 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")

---

Tags

ai-assisteddatabaseeloquentgame-dataimporterlaravellaravel-packagephpsteamsteam-apisteam-gamessteam-workshop

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/artryazanov-laravel-steam-apps-db/health.svg)

```
[![Health](https://phpackages.com/badges/artryazanov-laravel-steam-apps-db/health.svg)](https://phpackages.com/packages/artryazanov-laravel-steam-apps-db)
```

###  Alternatives

[illuminate/database

The Illuminate Database package.

2.8k52.4M9.4k](/packages/illuminate-database)[cybercog/laravel-love

Make Laravel Eloquent models reactable with any type of emotions in a minutes!

1.2k302.7k1](/packages/cybercog-laravel-love)[cviebrock/eloquent-taggable

Easy ability to tag your Eloquent models in Laravel.

567694.8k3](/packages/cviebrock-eloquent-taggable)[clickbar/laravel-magellan

This package provides functionality for working with the postgis extension in Laravel.

423715.4k1](/packages/clickbar-laravel-magellan)[genealabs/laravel-pivot-events

This package introduces new eloquent events for sync(), attach(), detach() or updateExistingPivot() methods on BelongsToMany relation.

1404.9M8](/packages/genealabs-laravel-pivot-events)[reedware/laravel-relation-joins

Adds the ability to join on a relationship by name.

2121.2M13](/packages/reedware-laravel-relation-joins)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
