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

dev-master 2025-11-18 09:12 UTC

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