Appearance
Query Builder
Introduction
WP Social Ninja uses an Eloquent-based ORM, compatible with Laravel's query builder. You can interact with the database through Model classes or through the query builder directly via the global wpsrDb() helper.
TIP
If you know Laravel's query builder, you already know this one. wpsrDb()->table('...') returns a fluent builder over any table (including WordPress core tables), while models give you the same builder scoped to a wpsr_ table.
Using a model
php
use WPSocialReviews\App\Models\Review;
$reviews = Review::query()
->where('review_approved', 1)
->whereBetween('rating', [4, 5])
->when($platform, function ($query) use ($platform) {
return $query->where('platform_name', $platform);
})
->orderBy('review_time', 'DESC')
->get();Using the query builder directly
php
$rows = wpsrDb()
->table('wpsr_reviews')
->select(['reviewer_name', 'rating', 'platform_name'])
->where('review_approved', 1)
->orderBy('id', 'DESC')
->get();Retrieving Results
All rows
php
$reviews = wpsrDb()->table('wpsr_reviews')->get();
foreach ($reviews as $review) {
echo $review->reviewer_name;
}A single row / column
php
// A single row
$review = wpsrDb()->table('wpsr_reviews')->where('platform_name', 'google')->first();
// A single value
$rating = wpsrDb()->table('wpsr_reviews')->where('id', 5)->value('rating');A list of column values
php
$ids = wpsrDb()->table('wpsr_reviews')->pluck('id');
// keyed by another column
$namesById = wpsrDb()->table('wpsr_reviews')->pluck('reviewer_name', 'id');Chunking large result sets
Process thousands of rows without loading them all into memory:
php
wpsrDb()->table('wpsr_reviews')->orderBy('id')->chunk(100, function ($reviews) {
foreach ($reviews as $review) {
// process each review
}
// return false; // stop further chunks
});Aggregates
php
$total = wpsrDb()->table('wpsr_reviews')->count();
$maxRate = wpsrDb()->table('wpsr_reviews')->max('rating');
$avgRate = wpsrDb()->table('wpsr_reviews')->where('platform_name', 'google')->avg('rating');Determining if records exist
php
$hasApproved = wpsrDb()->table('wpsr_reviews')->where('review_approved', 1)->exists();Selects
php
// Specific columns (with alias)
$rows = wpsrDb()->table('wpsr_reviews')
->select('reviewer_name', 'rating as stars')
->get();
// Distinct
$platforms = wpsrDb()->table('wpsr_reviews')->select('platform_name')->distinct()->get();
// Add to an existing select
$query = wpsrDb()->table('wpsr_reviews')->select('reviewer_name');
$rows = $query->addSelect('rating')->get();Where Clauses
Simple where
php
$rows = wpsrDb()->table('wpsr_reviews')->where('rating', 5)->get();
// With an operator
$rows = wpsrDb()->table('wpsr_reviews')->where('rating', '>=', 4)->get();
// Multiple (AND)
$rows = wpsrDb()->table('wpsr_reviews')
->where('platform_name', 'google')
->where('review_approved', 1)
->get();Or statements
php
$rows = wpsrDb()->table('wpsr_reviews')
->where('platform_name', 'google')
->orWhere('platform_name', 'facebook')
->get();Additional where clauses
php
// IN / NOT IN
wpsrDb()->table('wpsr_reviews')->whereIn('platform_name', ['google', 'yelp'])->get();
wpsrDb()->table('wpsr_reviews')->whereNotIn('rating', [1, 2])->get();
// BETWEEN
wpsrDb()->table('wpsr_reviews')->whereBetween('rating', [4, 5])->get();
// NULL checks
wpsrDb()->table('wpsr_reviews')->whereNull('reviewer_email')->get();
wpsrDb()->table('wpsr_reviews')->whereNotNull('review_time')->get();
// LIKE
wpsrDb()->table('wpsr_reviews')->where('reviewer_text', 'LIKE', '%great%')->get();Parameter grouping
Wrap complex OR logic in a closure to keep it correctly parenthesized:
php
$rows = wpsrDb()->table('wpsr_reviews')
->where('review_approved', 1)
->where(function ($query) {
$query->where('platform_name', 'google')
->orWhere('platform_name', 'facebook');
})
->get();Ordering, Grouping, Limit & Offset
php
$rows = wpsrDb()->table('wpsr_reviews')
->where('review_approved', 1)
->orderBy('review_time', 'DESC')
->groupBy('platform_name')
->limit(20)
->offset(40) // or ->skip(40)->take(20)
->get();Conditional Clauses
when() applies constraints only when a value is truthy — no manual if needed:
php
$rows = wpsrDb()->table('wpsr_reviews')
->when($minRating, function ($query) use ($minRating) {
return $query->where('rating', '>=', $minRating);
})
->when($search, function ($query) use ($search) {
return $query->where('reviewer_text', 'LIKE', "%{$search}%");
})
->get();Inserts
php
// Single row → returns the inserted ID
$id = wpsrDb()->table('wpsr_reviews')->insertGetId([
'platform_name' => 'custom',
'reviewer_name' => 'Jane Doe',
'rating' => 5,
'review_approved' => 1,
]);
// Multiple rows
wpsrDb()->table('wpsr_reviews')->insert([
['platform_name' => 'custom', 'reviewer_name' => 'A', 'rating' => 5],
['platform_name' => 'custom', 'reviewer_name' => 'B', 'rating' => 4],
]);Updates
php
$affected = wpsrDb()->table('wpsr_reviews')
->where('id', 10)
->update(['review_approved' => 1]);Increment & Decrement
Useful for the cache failure counter:
php
wpsrDb()->table('wpsr_caches')->where('id', $cacheId)->increment('failed_count');
wpsrDb()->table('wpsr_caches')->where('id', $cacheId)->decrement('failed_count', 1);Deletes
php
// Delete matching rows
wpsrDb()->table('wpsr_reviews')->where('review_approved', 0)->delete();
// Empty a table
wpsrDb()->table('wpsr_caches')->truncate();WP Social Ninja Query Examples
Approved reviews for a template's platforms
php
$reviews = wpsrDb()->table('wpsr_reviews')
->whereIn('platform_name', ['google', 'facebook'])
->where('review_approved', 1)
->where('rating', '>=', 4)
->orderBy('review_time', 'DESC')
->limit(20)
->get();Expired cache entries
php
$expired = wpsrDb()->table('wpsr_caches')
->where('platform', 'instagram')
->where('expiration', '<', current_time('mysql'))
->get();Duplicate-email check (respecting the one-review-per-email rule)
php
$exists = wpsrDb()->table('wpsr_reviews')
->where('source_id', $sourceId)
->where('reviewer_email', $email)
->exists();Rating distribution for a source
php
$distribution = wpsrDb()->table('wpsr_reviews')
->select('rating')
->selectRaw('COUNT(*) as total')
->where('source_id', $sourceId)
->where('review_approved', 1)
->groupBy('rating')
->orderBy('rating', 'DESC')
->get();Always prefix and validate
Query the wpsr_ tables by their unprefixed name (wpsrDb()->table('wpsr_reviews')) — the builder applies the WordPress table prefix for you. And validate every ID/value before it reaches a query, per the coding conventions.

