artryazanov / laravel-steam-apps-db
Laravel package for Steam apps database functionality
Requires
- php: ^8.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- laravel/pint: ^1.24
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.0
README
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.
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
Requirements
- PHP 8.0 or higher
- Laravel 10.x, 11.x, or 12.x
Installation Steps
- Install the package via Composer:
composer require artryazanov/laravel-steam-apps-db
-
The package will automatically register its service provider if you're using Laravel's package auto-discovery.
-
Publish and run the migrations:
php artisan migrate
Usage
Console Commands
The package provides one main console command:
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
laravel-steam-apps-db.enable_news_scanning
: Controls whether the package dispatches jobs to fetch Steam news. Default isfalse
(disabled). Set via envLSADB_ENABLE_NEWS_SCANNING=true
or publish and edit the config.laravel-steam-apps-db.queue
: Queue name for dispatched jobs (e.g.,high
,default
,low
). Default isdefault
. Set via envLSADB_QUEUE=default
or publish and edit the config.
Publish the config if needed:
php artisan vendor:publish --tag=laravel-steam-apps-db-config
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
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);
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
The package provides several Eloquent models to interact with the stored data:
Main Models
- SteamApp: The core model representing a Steam application
- SteamAppDetail: Detailed information about a Steam app
- SteamAppNews: News articles for a Steam app
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
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
The package creates the following tables:
steam_apps
- Main table with basic app infosteam_app_details
- Detailed information about each appsteam_app_requirements
- System requirements for different platformssteam_app_screenshots
- Screenshots for each appsteam_app_movies
- Videos/trailers for each appsteam_app_categories
- Categories reference tablesteam_app_category
- Pivot table for app-category relationshipsteam_app_genres
- Genres reference tablesteam_app_genre
- Pivot table for app-genre relationshipsteam_app_developers
- Developers reference tablesteam_app_developer
- Pivot table for app-developer relationshipsteam_app_publishers
- Publishers reference tablesteam_app_publisher
- Pivot table for app-publisher relationshipsteam_app_price_info
- Price information for each appsteam_app_news
- News items for each appsteam_app_dlcs
- DLC appids for each appsteam_app_demos
- Demos for each appsteam_app_packages
- Package ids for each appsteam_app_package_groups
- Package groups per appsteam_app_package_group_subs
- Group options (subs)steam_app_achievements_highlighted
- Highlighted achievementssteam_app_content_descriptor_ids
- Content descriptor idssteam_app_ratings
- Ratings by boards
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
This package is open-sourced software licensed under the Unlicense.