PHP code example of eltabarani / reusable-query

1. Go to this page and download the library: Download eltabarani/reusable-query library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

eltabarani / reusable-query example snippets


$activeUsers = User::withGlobalScope('is_active', new IsActiveScope())->get();

$activeUsers = User::useQuery(IsActiveQuery::class)->get();



namespace App\Queries;

use Eltabarani\ReusableQuery\Contracts\ReusableQueryContract;
use Illuminate\Database\Eloquent\Builder;

class IsActiveQuery implements ReusableQueryContract
{
    public function useQuery(Builder $query): Builder
    {
        return $query->where('status', '=', 'active');
    }
}



namespace App\Models;

use Eltabarani\ReusableQuery\Traits\HasReusableQuery;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use HasReusableQuery;
}

// Apply the IsActiveQuery to retrieve draft users
$draftUsers = User::useQuery(IsActiveQuery::class)->get();

// Apply the same query to other models, such as products, articles, or orders
$activeProducts = Product::useQuery(IsActiveQuery::class)->get();
$activeArticles = Article::useQuery(IsActiveQuery::class)->get();
$activeOrders = Order::useQuery(IsActiveQuery::class)->get();

// Composable queries
$users = User::useQueries([
    IsActiveQuery::class,
    EmailVerifiedQuery::class,
    RecentUsersQuery::class
])->get();

// or chaining methods
$users = User::useQuery(IsActiveQuery::class)
    ->useQuery(EmailVerifiedQuery::class)
    ->useQuery(RecentUsersQuery::class)
    ->get();

// Class names for clean, reusable query definitions
User::useQuery(IsActiveQuery::class);

// Instances with parameters, enabling dynamic query construction
User::useQuery(new UsersByRoleQuery('admin'));

// Closures, providing an optional inline query definition similar to global scopes
User::useQuery(fn($q) => $q->where('created_at', '>=', now()->subWeek()));

// Eloquent Scopes, compatibility with existing Laravel features
User::useQuery(new ActiveScope());

class UsersByRoleQuery implements ReusableQueryContract
{
    public function __construct(private string $role) {}

    public function useQuery(Builder $query): Builder
    {
        return $query->where('role', $this->role);
    }
}

// Apply queries with dynamic parameters
$admins = User::useQuery(UsersByRoleQuery::class, ['role' => 'admin'])->get();
$editors = User::useQuery(UsersByRoleQuery::class, ['role' => 'editor'])->get();