All Projects → mpyw → laravel-local-class-scope

mpyw / laravel-local-class-scope

Licence: MIT license
A tiny macro that reuse a global scope class as a local scope

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to laravel-local-class-scope

LazyBelongsToMany
A lightweight implementation of Laravel's belongs To many
Stars: ✭ 23 (+43.75%)
Mutual labels:  eloquent
laravel-arangodb
ArangoDB driver for Laravel
Stars: ✭ 43 (+168.75%)
Mutual labels:  eloquent
laravel-tmdb
Interact with TMDB data in your Laravel application.
Stars: ✭ 25 (+56.25%)
Mutual labels:  eloquent
db-safedelete
Attempts to invoke force delete, if it fails - falls back to soft delete
Stars: ✭ 16 (+0%)
Mutual labels:  eloquent
json-api-server
A JSON:API server implementation in PHP.
Stars: ✭ 43 (+168.75%)
Mutual labels:  eloquent
query-filter
Define filters for your Eloquent models based on your request
Stars: ✭ 20 (+25%)
Mutual labels:  eloquent
laravel-scoped-cache
Easily cache items specific to your Eloquent models without having to append the ID.
Stars: ✭ 28 (+75%)
Mutual labels:  eloquent
laravel-searchzy
Package que te permite buscar y filtrar registros de Eloquent Models en Laravel de una manera simple y sencilla.
Stars: ✭ 15 (-6.25%)
Mutual labels:  eloquent
dilovel
An advanced framework is written in PHP, a framework containing rich components such as middleware, orm, request management, template engine, elasticsearch, template engine, many modern frameworks have been written by adopting clean code principles completely written in accordance with PHP standards. like linux operating system ...All of control…
Stars: ✭ 38 (+137.5%)
Mutual labels:  eloquent
laravel-mass-update
Update multiple Laravel Model records, each with its own set of values, sending a single query to your database!
Stars: ✭ 65 (+306.25%)
Mutual labels:  eloquent
laravel-auto-morph-map
THIS PACKAGE HAS BEEN DEPRECATED — Automatically alias and map the polymorphic types of Eloquent models.
Stars: ✭ 55 (+243.75%)
Mutual labels:  eloquent
laravel-sti
Single table inheritance with Laravel/Eloquent
Stars: ✭ 16 (+0%)
Mutual labels:  eloquent
SlimREST
An app skeleton for building a REST API with the Slim PHP Micro-Framework
Stars: ✭ 22 (+37.5%)
Mutual labels:  eloquent
Laravel-Auto-Hard-Deleter
Laravel and Lumen Auto Hard Deleter
Stars: ✭ 34 (+112.5%)
Mutual labels:  eloquent
LaraPersonate
Login as a different user quickly
Stars: ✭ 121 (+656.25%)
Mutual labels:  eloquent
query-filter
🔍 Database/Eloquent Query Builder filters for Laravel
Stars: ✭ 69 (+331.25%)
Mutual labels:  eloquent
eloquent-repository
Repository pattern for Eloquent ORM with focus in cache.
Stars: ✭ 30 (+87.5%)
Mutual labels:  eloquent
pimpable
No description or website provided.
Stars: ✭ 102 (+537.5%)
Mutual labels:  eloquent
laravel-route-model-autobinding
THIS PACKAGE HAS BEEN DEPRECATED — Automatically bind Eloquent models as route segment variables.
Stars: ✭ 14 (-12.5%)
Mutual labels:  eloquent
eloquent-has-by-join
Convert has() and whereHas() constraints to join() ones for single-result relations.
Stars: ✭ 21 (+31.25%)
Mutual labels:  eloquent

Laravel Local Class Scope Build Status Coverage Status Scrutinizer Code Quality

A tiny macro that reuse a global scope class as a local scope.

The idea is from: [Proposal] Local query scopes as classes · Issue #636 · laravel/ideas

Requirements

  • PHP: ^7.3 || ^8.0
  • Laravel: ^6.0 || ^7.0 || ^8.0 || ^9.0

Installing

composer require mpyw/laravel-local-class-scope

Usage

Simple Scope

class ActiveScope implements Scope
{
    public function apply(Builder $query, Model $model): void
    {
        $query->where('active', true);
    }
}
User::scoped(ActiveScope::class)->get();
User::scoped(new ActiveScope())->get();

Scope that takes arguments

class AgeScope implements Scope
{
    protected $parameters;

    public function __construct(...$parameters)
    {
        $this->parameters = $parameters;
    }

    public function apply(Builder $query, Model $model): void
    {
        $query->where('age', ...$this->parameters);
    }
}
User::scoped(AgeScope::class, '>', 18)->get();
User::scoped(new AgeScope('>', 18))->get();

Combination

User::scoped(ActiveScope::class)->scoped(AgeScope::class, '>', 18)->get();

Re-define as a local method scope

class User extends Model
{
    public function scopeActive(Builder $query): Builder
    {
        return $this->scoped(ActiveScope::class);
    }
}

Share local method re-definition via trait

trait ScopesActive
{
    public function scopeActive(Builder $query): Builder
    {
        return $this->scoped(ActiveScope::class);
    }    
}
class User extends Model
{
    use ScopesActive;
}
class Admin extends Model
{
    use ScopesActive;
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].