hollisho / wp-orm
Eloquent-like ORM for WordPress with read-write splitting and multisite support
Installs: 41
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/hollisho/wp-orm
Requires
- php: >=7.4
This package is auto-updated.
Last update: 2025-11-18 09:12:56 UTC
README
Eloquent-like ORM for WordPress with advanced features.
Features
- 🔗 Fluent Query Builder - Chain methods for elegant queries
- 📖 Read-Write Splitting - Separate read and write database connections
- 🌐 Multisite Support - Automatic table prefix handling for WordPress multisite
- 🔄 Relationships - HasOne, HasMany, BelongsTo, ManyToMany
- 📦 Collections - Powerful collection methods
- 🎯 Model Events - Hooks for creating, updating, deleting
- 🔍 Scopes - Reusable query constraints
Installation
composer require hollisho/wp-orm
Quick Start
use WPOrm\Model\Model; class Post extends Model { protected static string $table = 'posts'; public function author() { return $this->belongsTo(User::class, 'post_author'); } } // Query $posts = Post::where('post_status', 'publish') ->orderBy('post_date', 'desc') ->limit(10) ->get(); // Find by ID $post = Post::find(1); // Relationships $author = $post->author;
Configuration
Basic Setup
use WPOrm\Database\ConnectionManager; ConnectionManager::configure([ 'default' => 'mysql', 'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'host' => DB_HOST, 'database' => DB_NAME, 'username' => DB_USER, 'password' => DB_PASSWORD, 'charset' => DB_CHARSET, 'prefix' => $GLOBALS['wpdb']->prefix, ] ] ]);
Read-Write Splitting
ConnectionManager::configure([ 'default' => 'mysql', 'connections' => [ 'mysql' => [ 'read' => [ 'host' => '192.168.1.2', ], 'write' => [ 'host' => '192.168.1.1', ], 'driver' => 'mysql', 'database' => DB_NAME, 'username' => DB_USER, 'password' => DB_PASSWORD, 'charset' => DB_CHARSET, 'prefix' => $GLOBALS['wpdb']->prefix, ] ] ]);
Multisite Support
// Automatically uses the correct table prefix for the current site $posts = Post::onSite(2)->where('post_status', 'publish')->get(); // Or use global tables $users = User::global()->get();
License
MIT